Question

J'ai une base de données PostgreSQL spatiale \ PostGIS qui contient des colonnes de texte en hébreu. Le système fonctionne sur Ubuntu, et tout fonctionne parfaitement avec UTF-8.

Je suis en train de vider quelques tables dans shapefile pour un programme Windows qui ne peut lire des chaînes Windows 1255. Malheureusement, pgsql2shp n'a pas l'option d'encodage, bien que shp2pgsql a, de sorte que le programme Widnows lit UTF-8 analysé comme Windows 1255 donnant charabia.

Je suis en train de créer une vue Windows 1255 aux colonnes de la table, mais n'a trouvé aucun moyen de le faire sans altérer la base de données.

Toutes les idées comment convertir les tables?

Merci,

Adam

Mise à jour:

Je pensais que celui-ci a été résolu (voir ma réponse), par je reçois toujours des erreurs aléatoires comme:

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

Ce que je veux est une sorte de fonctionnalité omettent: comme iconv drapeau -c l ', qui ne copie pas simplement des caractères source sans équivalent de codage cible int.

Était-ce utile?

La solution

Si vous voulez vraiment dire ASCII, vous ne pouvez pas éventuellement sauver des caractères hébreux. ASCII est seulement le caractère 7 bits à \x7F.

Alors, quel genre de cordes ce que ce programme de Windows lu? Si elle est ASCII ou Latin-1, vous ne serez jamais hébreu. Plus probablement, il est « la page de code du système actuel », aussi (trompeusement mais couramment) connu sous Windows comme « ANSI ».

Si tel est le cas, vous devrez définir la page de code du système sur chaque machine qui exécute le programme Windows à l'hébreu (page de code 1255). Je crois que les fichiers SHP ont pas de caractère codage de l'information à tous, de sorte que les shapefiles ne seront jamais fonctionner correctement sur des machines avec cet ensemble de page de code (par défaut uniquement dans les paramètres régionaux d'Israël). (Exportations Apparemment .dbf peuvent avoir un fichier .cpg d'accompagnement pour spécifier l'encodage, mais je n'ai aucune idée si le programme que vous utilisez des supports que.)

Ensuite, vous auriez à exporter les données page de code 1255, ou vous êtes le plus proche va obtenir dans Postgres, ISO-8859-8. Étant donné que le script d'exportation ne semble pas avoir une possibilité de faire autre chose que prendre octets directement à partir de la base de données, vous auriez à créer une base de données dans l'encodage ISO-8859-8 et transférer toutes les données de la base de données UTF-8 à l'un 8859-8, soit directement par des requêtes ou, peut-être plus facile, en utilisant pgdumpall et le chargement du SQL dans le Bloc-notes puis ré-enregistrer en hébreu au lieu de UTF-8 (réglage des paramètres de codage figurant dans SQL DDL que vous allez).

Je me demande si les responsables du programme Windows pourraient être persuadés de soutenir UTF-8? Il est un peu triste d'être coincé avec un logiciel spécifique code page dans ce siècle.

Autres conseils

dans le 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

L'instruction export PGCLIENTENCODING=$ENCODING; fait l'affaire.

Vérification de tables de codage en hébreu et tables de page, vous pouvez voir que ISO-8859-8 et Windows 1255 ont pas de correspondance pour 0x9f.

Les données que vous essayez de convertir pourrait être basé sur le plus Codepage 862 , une page de code pour l'hébreu sous DOS. Codepage 862 cartes le code 0x9f au caractère unicode "LETTRE MINUSCULE LATINE F CROCHET", 0x0192.

Vous pouvez enquêter sur des erreurs « aléatoires » similaires, et décider de la cartographie des codes non-windows-1255 dans les données.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top