【发布时间】:2013-02-13 11:13:47
【问题描述】:
在使用 Python (Django) ORM 从未知/旧/不一致的 Mysql 数据库中获取数据到 Postgres utf-8 db 时,我有时会收到错误的编码数据。
目标:格雷戈里
> a
u'gr\xe3\xa9gory'
> print a
grã©gory
我尝试了几种解码/编码技巧,但均未成功:
> print a.encode('utf-8').decode('latin1')
grã©gory
> print a.encode('utf-8').decode('latin1')
grã©gory
> print a.decode('latin-1')
UnicodeEncodeError: 'ascii' codec can't encode characters in position 2-3: ordinal not in range(128)
即使有一些 unicode_escape
【问题讨论】:
-
你是如何获取数据的?你有一个 unicode 实例,里面有错误的字符;您首先要修复产生
a的解码步骤。您显示的代码发生得太晚了。 -
数据,即使解释为字节而不是 unicode,也不是有效的 UTF8。在该编码中从未遇到过 E3 A9。
-
This 应该可以帮助您在 python 2.x 中使用 unicode;这是“unicode 三明治”的话题。
-
这两个字节的正确 Unicode 代码点是什么?我们或许可以弄清楚这里出了什么问题,但不知道正确的解释是什么,几乎不可能重建。
-
最后但同样重要的是,encoding 到 Latin-1 至少会保留“字节”; unicode 代码点 0-255 被编码为具有匹配值的字节,因此您可以将这些字节重新解释为不同的编码。
标签: python utf-8 character-encoding