Pergunta

Eu tenho um banco de dados espacial PostgreSQL \ PostGIS que contém colunas de texto em hebraico. O sistema funciona em Ubuntu, e tudo funciona perfeitamente com UTF-8.

Eu estou tentando despejar algumas tabelas em shapefile para um programa do Windows que só pode ler o Windows-1255 cordas. Infelizmente, pgsql2shp não tem opção de codificação, embora shp2pgsql tem, por isso, o programa Widnows lê UTF-8 analisado como o Windows-1255 dando Gibberish.

Eu tenho tentado criar uma exibição do Windows-1255 para as colunas da tabela, mas não encontrou maneira de fazer isso sem corromper o banco de dados.

Todas as idéias como converter as tabelas?

Obrigado,

Adam

UPDATE:

Eu pensei que este foi resolvido (ver a minha própria resposta), por que eu ainda obter erros aleatórios como:

ERROR:  character 0x9f of encoding "WIN1255" has no equivalent in "UTF8"

O que eu quero é algum tipo de funcionalidade omitir: como iconv 's -c bandeira, que simplesmente não copiar caracteres de origem que não têm codificação alvo int equivalente.

Foi útil?

Solução

Se você realmente quer dizer ASCII, você não pode possivelmente resgatar caracteres hebraicos. ASCII é apenas o caráter de 7 bits configurado para \x7F.

Assim que tipo de cordas que este programa do Windows ler? Se é ASCII, ou Latin-1, você nunca vai conseguir hebraico. O mais provável é “a página de código atual do sistema”, também (enganosamente, mas normalmente) conhecido no Windows como ‘ANSI’.

Se for esse o caso, você terá de definir a página de código do sistema em cada máquina que executa o programa Windows para hebraico (página de código 1255). Acredito arquivos SHP não temos informação de codificação de caracteres em tudo, então os shapefiles só vai funcionar corretamente em máquinas com este conjunto de página de código (o padrão apenas na localidade Israel). (Aparentemente exportações .dbf pode ter um arquivo .cpg acompanha para especificar a codificação, mas não tenho idéia se o programa que você está usando oferece suporte a isso.)

Em seguida, você teria que exportar os dados como página de código 1255, ou o mais próximo que você vai entrar em Postgres, ISO-8859-8. Uma vez que o script de exportação não parece ter qualquer opção para fazer nada, mas tomar bytes diretos do banco de dados, você tem que criar um banco de dados na codificação ISO-8859-8 e transferir todos os dados do banco de dados UTF-8 à 8859-8 um, seja diretamente através de consultas ou, talvez fácil, usando pgdumpall e carregar o SQL no bloco de notas, em seguida, está salvando-o como hebraico, em vez de UTF-8 (ajuste de configurações de codificação listadas em SQL DDL como você ir).

Gostaria de saber se os criadores do programa do Windows poderia ser persuadido a suporte UTF-8? É um pouco triste por estar preso com software específico código de páginas neste século.

Outras dicas

De dentro do script bash:

select ENCODING in UTF8 WIN1252 WIN1255 ISO-8859-8;
do
        if [[ -n $ENCODING ]]; then
                export PGCLIENTENCODING=$ENCODING;
                break
        else
                echo 'Invalid encoding.'
        fi
done

A declaração export PGCLIENTENCODING=$ENCODING; faz o truque.

Verificar hebraicas tabelas de codificação e tabelas de páginas, você pode ver que ISO-8859-8 e Windows-1255 tem nenhum mapeamento para 0x9f.

Os dados que você está tentando converter poderia basear-se no mais velho Codepage 862 , uma página de código para o hebraico no DOS. Codepage 862 mapeia o 0x9f código para o caractere Unicode "A minúsculo F COM GANCHO", 0x0192.

Você pode investigar erros "aleatórios" semelhantes, e decidir sobre o mapeamento para os não-windows-1255 códigos nos dados.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top