Я перемещаю некоторые базы данных с Postgres 7.4.8 на 8.4.5 на CentOS 5. В старой базе данных используется кодировка UNICODE. Итак, я сделал текст pg_dump, создал свои новые базы данных следующим образом:
createdb --template template0 - кодирование unicode testdb
и импортировал данные:
psql testdb <testdb.dmp> и testdb.out
К сожалению, эти ошибки встречаются повсюду:
ОШИБКА: недопустимая последовательность байтов для кодировки «UTF8»: 0x8e
Я знаю, что iconv - это инструмент, который чаще всего рекомендуется исправить, но я не уверен, что такое преобразование. Я попытался запустить его из Unicode в UTF8, поскольку именно это сообщает Postgres для моей новой базы данных, но в результате был получен файл, полный того, что выглядело как китайские символы. Я также пробовал UTF8 в UTF8; который подавляется первым из оскорбляющих персонажей:
iconv: недопустимая последовательность ввода в позиции 874924
Я хотел бы знать: а) почему у меня возникают проблемы, когда я не меняю набор символов? И б) есть ли способ исправить это недостаток редактирования файла дампа вручную?
Спасибо!
Для потомков ... оказалось, что (я думаю) у меня было сочетание нескольких разных наборов символов в данных. В итоге я сначала запустил
iconv -f macintosh -t utf-8
Чтобы исправить акцентированные символы a и другие, которые вызывали проблемы при импорте, а затем выполнить ручной поиск и замену, чтобы избавиться от всех интеллектуальных символов Windows, которые были искажены вышеупомянутым преобразованием. После этого все было чисто импортировано в Postgres и выглядело нормально. Не лучшее решение, но единственное, что мне удалось выяснить, что сработало.