我有这样的功能:
def convert_to_unicode(data):
row = {}
if data == None:
return data
try:
for key, val in data.items():
if isinstance(val, str):
row[key] = unicode(val.decode('utf8'))
else:
row[key] = val
return row
except Exception, ex:
log.debug(ex)
我MySQLdb.cursors.DictCursor
逐行提供一个结果集(使用)以将所有字符串值转换为 unicode(示例{'column_1':'XXX'}
变为{'column_1':u'XXX'}
)。
问题是其中一行具有类似的值{'column_1':'Gabriel García Márquez'}
并且它没有被转换。它抛出这个错误:
'utf8' codec can't decode byte 0xed in position 12: invalid continuation byte
当我搜索这个时,这似乎与 ascii 编码有关。
我尝试的解决方案是:
在我的文件开头添加
# -*- coding: utf-8 -*-
......没有帮助按预期将行更改
row[key] = unicode(val.decode('utf8'))
为row[key] = unicode(val.decode('utf8', 'ignore'))
... 它会忽略非 ascii 字符并返回{'column_1':u'Gabriel Garca Mrquez'}
将行更改
row[key] = unicode(val.decode('utf8'))
为row[key] = unicode(val.decode('latin-1'))
...可以完成工作,但恐怕它将仅支持西欧字符(根据此处)
谁能指出我正确的方向。