символ 0xc286 кодировки "UTF-8" не имеет эквивалента в "WIN1252" .... При конвертации с iconv postgres восстановление приводит к сбою - PullRequest
3 голосов
/ 13 декабря 2011

Я работаю над программным обеспечением, которое использует Delphi и Postgres 9.0, оригинальный разработчик выбрал кодировку базы данных как SQL_ASCII ... поэтому мы изменили кодировку на UTF-8 для нашей базы данных. мы начали получать эту ошибку после

enter image description here Нажатие одного из флажков (форма заполняется из базы данных) запрос, где появляется ошибка:

'выбрать * из дневника, где опрос в (' 2005407 ')';

но эта ошибка возникает только для нескольких флажков, а не для ВСЕХ

Изменение является прямым, но у нас есть большой объем исторических данных, которые нам придется повторно сохранить во вновь созданной UTF-8 базе данных ... поэтому я выполнил шаги, которые нашел в сети и stackoverflow также

  1. Дамп базы данных как e- UTF-8 SQL_Ascii_backup.backup
  2. Используйте iconv для преобразования SQL_ASCII в UTF-8

    "C:\Program Files\GnuWin32\bin\iconv.exe" -f ISO8859-1 -t UTF-8 C:\SQL_Ascii_backup.backup>UTF_Backup.backup
    

    3.Создать новую базу данных с кодировкой UTF-8 и заново сохранить резервную копию UTF_Backup.backup

Но когда я пытаюсь восстановить его, я получаю его ошибку Error when i try to restore the newly encoded backup

Затем я попытался сбросить исходную SQL_ASCII базу данных в виде простого SQL_Ascii_.sql файла. и затем снова я использовал iconv, чтобы изменить кодировку .. и затем восстановить

  >"C:\Program Files\PostgreSQL\9.0\bin\psql.exe"-h localhost -p 5434 -d myDB -U myDB_admin -f C:\converted_utf8.sql

это восстанавливается правильно, но я все еще получаю ошибку.

'символ 0xc286 кодировки "UTF-8" не имеет эквивалента в "WIN1252";

Ответы [ 2 ]

6 голосов
/ 13 декабря 2011

C2 86 - кодировка UTF-8 символа U + 0086, скрытого C1 управляющего символа . Этот символ существует в ISO-8859-1 , но отсутствует в кодовой странице Windows по умолчанию 1252 , в которой есть печатаемые символы в пространстве, где ISO-8859-1 имеет элементы управления C1.

Ваша команда iconv для преобразования в UTF-8 имеет -f ISO8859-1, но вы, вероятно, имели в виду -f windows-1252. Это сопоставляет байт 86 с символом .

1 голос
/ 14 декабря 2011

я избавился от ошибки

'символ 0xc286 кодировки "UTF-8" не имеет эквивалента в "WIN1252";

, следуя dan04 ответу, но чтобы iconv не смог преобразовать дамп

  1. Создать дамп базы данных UTF-8 (сделать простой сброс ... так что вы сможете найти точку сбоя)
  2. Используйте iconv для преобразования SQL_ASCII в UTF-8 с использованием

    "C: \ Program Files \ GnuWin32 \ bin \ iconv.exe" -f windows-1252 -t UTF-8 C: \ MqPlainDump.sql> convertDump.sql

  3. Заменить символ '[]' (это в моем случае вызывало проблему .. это квадратный символ)

  4. Восстановление базы данных

И приложение подходит для работы (в моем случае)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...