编码“UTF-8”的字符0xc286在“WIN1252”中没有等效....在使用iconv postgres进行转换时恢复崩溃

时间:2011-12-13 13:15:48

标签: delphi postgresql character-encoding

我正在开发一个使用delphi和postgres 9.0的软件, 原始开发人员选择数据库编码为“ SQL_ASCII ”... 所以我们将数据库的编码更改为 UTF-8 。 我们在

之后开始出现此错误

enter image description here 点击其中一个复选框 (表单从数据库中填充) 错误发生的查询是

  

'从日记中选择*,在('2005407')'中进行调查;

但此错误仅适用于少数复选框而非所有

变化很简单,但是我们有大量的历史数据需要重新存储到新创建的 UTF-8 数据库中。所以我按照我在上面找到的步骤进行了操作net和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

  3. 但是当我尝试恢复它时,我得到了他的错误 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
    

    这是正确恢复,但我仍在解决错误。

      编码“UTF-8”的

    '字符0xc286在“WIN1252”中没有等效字符;

2 个答案:

答案 0 :(得分:6)

C2 86是字符U + 0086的UTF-8编码,一个不起眼的C1 control character。此字符存在于ISO-8859-1中,但不存在于Windows的默认code page 1252中,其在ISO-8859-1具有C1控件的空间中具有可打印字符。

要转换为UTF-8的iconv命令有-f ISO8859-1,但您的意思可能是-f windows-1252。这会将字节86映射到字符。

答案 1 :(得分:1)

我摆脱了错误

  编码“UTF-8”的

'字符0xc286在“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> convertedDump.sql

  3. 替换'[]'字符(这是我的情况,这导致麻烦..方形字符)

  4. 恢复数据库

  5. 应用程序很好(在我的情况下)