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

Pre*_*ias 3 delphi postgresql character-encoding

我正在开发一个使用delphi和postgres 9.0的软件,原始开发人员选择了数据库编码为' SQL_ASCII '...所以我们将数据库的编码更改为UTF-8 ..我们之后开始收到此错误

在此输入图像描述 单击其中一个复选框(表单从数据库填充)查询错误所在的查询

'select*from diary where in survey in(''2005407')';

但是这个错误只出现在几个复选框而不是ALL

这个改变是直截了当的,但是我们有大量的历史数据需要重新存储到新创建的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
    
    Run Code Online (Sandbox Code Playgroud)

    3.创建一个编码为UTF-8的新数据库,然后重新存储备份 UTF_Backup.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
Run Code Online (Sandbox Code Playgroud)

这是正确恢复,但我仍然在纠正错误.

编码"UTF-8"的字符0xc286在"WIN1252"中没有等价物;

dan*_*n04 6

C2 86是字符U + 0086的UTF-8编码,是一个模糊的C1控制字符.此字符存在于ISO-8859-1中,但不存在于Windows的默认代码页1252中,该页面在ISO-8859-1具有C1控件的空间中具有可打印字符.

你的iconv命令转换为UTF-8有-f ISO8859-1,但你可能意味着-f windows-1252.这将字节86映射到字符.