3

在使用 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

4

3 回答 3

7

我猜该字符串在某些时候被错误地转换为小写,更改\xc3\xe3. 当它实际上是 utf-8 时,小写转换假定为 latin1 编码。

>>> print 'gr\xc3\xa9gory'.decode('utf8')
grégory
于 2013-02-13T11:24:45.583 回答
-2

由于问题是较低的(),我可以解决它:

print a.upper().encode('latin1').lower()
于 2013-02-13T11:40:56.043 回答
-6

试试这个:

print a.decode('latin1')
于 2013-02-13T11:20:46.370 回答