【发布时间】:2012-11-25 06:35:37
【问题描述】:
我有这样的功能:
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'))... 可以,但恐怕它只支持西欧字符(根据 Here )
谁能指出我正确的方向。
【问题讨论】:
标签: python mysql unicode python-2.7 mysql-python