Преобразование базы данных PostgreSQL UTF-8 в шейп-файл WIN-1255

StackOverflow https://stackoverflow.com/questions/1896474

Вопрос

У меня есть пространственная база данных PostgreSQL\PostGIS, содержащая текстовые столбцы на иврите.Система работает на Ubuntu, и с UTF-8 все работает безупречно.

Я пытаюсь записать некоторые таблицы в шейп-файл для программы Windows, которая может читать только строки Windows-1255.К сожалению, pgsql2shp не имеет опции кодирования, хотя shp2pgsql есть, поэтому программа Widnows читает UTF-8, анализируемую как Windows-1255, что дает тарабарщину.

Я пытался создать представление Windows-1255 для столбцов таблицы, но не нашел способа сделать это без повреждения базы данных.

Есть идеи, как конвертировать таблицы?

Спасибо,

Адам

ОБНОВЛЯТЬ:

Я думал, что эта проблема решена (см. Мой собственный ответ), но я все еще получаю случайные ошибки, такие как:

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

Мне нужна какая-то функция пропуска:нравиться iconv's -c флаг, который просто не копирует исходные символы, не имеющие эквивалентной целевой кодировки int.

Это было полезно?

Решение

Если вы действительно имеете в виду ASCII, вы не сможете спасти символы иврита.ASCII — это всего лишь 7-битный символ, настроенный для \x7F.

Итак, какие строки читает эта программа для Windows?Если это ASCII или Latin-1, вы никогда не получите иврит.Скорее всего, это «текущая системная кодовая страница», также (ошибочно, но широко известная) в Windows как «ANSI».

В этом случае вам придется установить системную кодовую страницу на каждом компьютере, на котором запущена программа Windows, на иврит (кодовая страница 1255).Я считаю, что файлы shp вообще не содержат информации о кодировке символов, поэтому шейп-файлы будут корректно работать только на компьютерах с этой установленной кодовой страницей (по умолчанию только в языковом стандарте Израиля).(Видимо .dbf экспорт может иметь сопутствующее .cpg файл, чтобы указать кодировку, но я понятия не имею, поддерживает ли это программа, которую вы используете.)

Затем вам придется экспортировать данные как кодовую страницу 1255 или ближайшую кодовую страницу, которую вы собираетесь получить в Postgres, ISO-8859-8.Поскольку сценарий экспорта, похоже, не имеет возможности делать что-либо, кроме как брать прямые байты из базы данных, вам придется создать базу данных в кодировке ISO-8859-8 и перенести все данные из базы данных UTF-8. к 8859-8 либо напрямую через запросы, либо, что проще, с помощью pgdumpall и загрузите SQL в Блокнот, а затем повторно сохраните его как иврит вместо UTF-8 (настраивая любые параметры кодировки, перечисленные в SQL DDL, по ходу работы).

Интересно, можно ли убедить создателей программы Windows поддержать UTF-8?Немного грустно в этом веке застрять в программном обеспечении, ориентированном на кодовые страницы.

Другие советы

Из 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

А export PGCLIENTENCODING=$ENCODING; заявление делает свое дело.

Проверка таблиц и еврейских таблиц и таблицы страниц, вы можете увидеть, что ИСО-8859-8 и Windows-1255 не иметь карт для 0x9f.

Данные, которые вы пытаетесь преобразовать, могут быть основаны на более старых Кодовая страница 862, кодовая страница для иврита под DOS.Codepage 862 отображает код 0x9f к символу Unicode "Латинская маленькая буква f с крючком", 0x0192.

Вы можете исследовать подобные «случайные» ошибки и принять решение о сопоставлении кодов, отличных от Windows 1255, в данных.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top