首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >编码UTF-8的字符0xe2809a在迁移到LATIN9后在“UTF8”中不等效。

编码UTF-8的字符0xe2809a在迁移到LATIN9后在“UTF8”中不等效。
EN

Stack Overflow用户
提问于 2012-10-03 06:19:24
回答 1查看 2.3K关注 0票数 0

最近,我们将数据库从SQL_ASCII迁移到UTF8编码。运行应用程序后,我们将开始获得以下错误消息:

编码UTF-8的字符0xc 296在"WIN1252“中没有等效之处。

因此,我们遇到了iconv,转换按以下步骤完成

1-将现有数据库转储为

代码语言:javascript
复制
"C:\Program Files\PostgreSQL\9.0\bin/pg_dump.exe" --host localhost --port  5433 --username "myadmin" --format plain --encoding UTF8 --verbose --file "C:\UTF8Dump.sql" mydb

2-使用biconv/b进行转换

代码语言:javascript
复制
 "C:\Program Files\GnuWin32\bin\iconv.exe"  -c  -f windows-1252 -t UTF-8 C:\UTF8Dump.sql>C:\ConvertedUTF8Dump.sql

3创建一个nerw UTF编码DB。

4从步骤2导入sql

我们消除了错误,但是

在其他的系统上

编码UTF-8的字符0xe2809a在迁移到LATIN9后不等同于“UTF8”问题。

因此,我们尝试了相同的步骤,并进行了如下不同的转换

代码语言:javascript
复制
"C:\Program Files\GnuWin32\bin\iconv.exe"  -c  -f ISO-8859-15 -t UTF-8  C:\UTF8Dump.sql>C:\ConvertedUTF8Dump.sql

但是这个错误仍然是

编码UTF-8的字符0xe2809a在迁移到LATIN9后没有对应的“UTF8”问题。

有什么想法吗?

EN

回答 1

Stack Overflow用户

发布于 2012-10-03 06:29:55

您确定源DB是SQL_ASCII吗?

数据库中的文本实际上是用什么编码的?你有可能在里面混合了几种不同的编码吗?这在没有强制执行任何正常编码规则的DBs中并不少见。

0xc296 in utf-8保卫区域的unicode U+96启动。这似乎是一个相当荒谬的字符,来自一个转换从一个windows-1252的来源。

在utf-8中的0xe2809aU+201a单引号-9引号.它在ISO8859-15中无效,因此PostgreSQL在这里正确地产生了一个错误。

我想说的是,您的数据库中可能有多个相互不兼容的编码字符串,因此没有一种转换适用于整个数据库。欢迎来到joy,从混合编码的混合混合迁移到一个严格的utf-8环境。

或者,如果您确实知道您的DB是什么编码,并且知道它是一致的,您可以尝试不使用pg_dump,不使用--encoding,然后编辑转储并添加/更改SET client_encoding语句以反映新的编码。如果您没有在转储后更改SET client_encoding,这很可能解释了这个问题,因为您将告诉Pg将您转换成utf-8的数据解释为latin-9或其他什么的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12702854

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档