Pregunta

Tengo una base de datos espacial PostgreSQL \ PostGIS que contiene las columnas de texto hebreo. El sistema funciona en Ubuntu, y todo funciona sin problemas con UTF-8.

Estoy tratando de volcar algunas tablas en shapefile para un programa de Windows que sólo puede leer las cadenas de Windows 1255. Por desgracia, pgsql2shp no tiene ninguna opción de codificación, aunque shp2pgsql tiene, por lo que el programa lee Widnows UTF-8 analizada como Windows-1255 dando un galimatías.

He estado tratando de crear una vista de Windows-1255 a las columnas de las tablas, pero no encontré ninguna manera de hacerlo sin corromper la base de datos.

¿Alguna idea de cómo convertir las tablas?

Gracias,

Adam

ACTUALIZACIÓN:

I Thought éste fue resuelto (ver mi propia respuesta), por sigo teniendo errores aleatorios como:

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

Lo que quiero es algún tipo de funcionalidad omitir: iconv 's bandera -c, que simplemente no copia caracteres fuente que no tienen equivalente objetivo de codificación int.

¿Fue útil?

Solución

Si usted realmente quiere decir ASCII, no se puede rescatar posiblemente caracteres hebreos. ASCII es sólo el carácter de 7 bits hasta \x7F.

Entonces, ¿qué tipo de cuerdas no lea este programa de Windows? Si se trata de ASCII, o Latin-1, que no se consigue hebreo. Lo más probable es “la página de códigos del sistema actual”, también (pero engañosamente comúnmente) conocido en Windows como ‘ANSI’.

Si ese es el caso, tendrá que establecer la página de códigos del sistema en cada máquina que ejecuta el programa de Windows para Hebrea (página de códigos 1255). Creo archivos SHP no tienen carácter de codificación de la información en absoluto, por lo que los archivos de forma sólo nunca funcionará correctamente en las máquinas con este conjunto de páginas de código (por defecto sólo en la configuración regional de Israel). (Al parecer, las exportaciones .dbf pueden tener un archivo adjunto .cpg para especificar la codificación, pero no tengo ni idea de si el programa que está utilizando soportes que.)

A continuación, usted tendría que exportar los datos como código de la página 1255, o lo más cerca que vas a obtener en Postgres, ISO-8859-8. Dado que no parece el guión de exportación para tener alguna opción de hacer otra cosa que tomar bytes directos de la base de datos, habría que crear una base de datos en la codificación ISO-8859-8 y transferir todos los datos de la base de datos UTF-8 a la 8859-8 uno, ya sea directamente a través de consultas o, quizás más fácil, utilizando pgdumpall y cargar el SQL en el Bloc de notas a continuación, volver a guardarlo como hebreo en lugar de UTF-8 (el ajuste de la configuración de codificación que figuran en SQL DDL a medida que avanza).

Me pregunto si los creadores del programa de Windows podrían ser persuadidos para apoyar UTF-8? Es un poco triste a estar pegado a la página de códigos de software específico en este siglo.

Otros consejos

Desde dentro de la escritura del golpe:

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

La declaración export PGCLIENTENCODING=$ENCODING; hace el truco.

Comprobación hebreas tablas de codificación y tablas de páginas, se puede ver que ISO-8859-8 y Windows-1255 tiene ninguna asignación para 0x9f.

Los datos que está intentando convertir podría basarse en la mayor página de códigos 862 , una página de códigos para el hebreo bajo DOS. Codepage 862 mapea la 0x9f código para el carácter Unicode "AMÉRICA LETRA F con gancho", 0x0192.

Puede investigar los errores "al azar" similares, y decidir acerca de la asignación de los códigos que no sean Windows-1255 en los datos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top