我的应用程序从远程MySQL数据库下载一些数据。问题是db将字符串存储为utf8。但我收到的数据是ascii解码。怎么解决这个问题?
代码:
cursor = conn.cursor()
query = """MY QUERY HERE"""
cursor.execute(query)
result = cursor.fetchall()
答案 0 :(得分:2)
也许一个例子是有序的 - 在这里我创建一个unicode字符串“u”,将其编码为utf8,将其从utf8解码回unicode字符串,将其编码为ascii(由于扩展字符,因此会抛出异常)这个字符串不能编码为ascii),最后编码为ascii用“?”替换错误:
Python 2.6.4 (r264:75706, Dec 7 2009, 18:43:55)
[GCC 4.4.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> u = u'abc\u2020123'
>>> u
u'abc\u2020123'
>>> u.encode('utf8')
'abc\xe2\x80\xa0123'
>>> s = _
>>> s.decode('utf8')
u'abc\u2020123'
>>> u.encode('ascii')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character u'\u2020' in position 3: ordinal not in range(128)
>>> u.encode('ascii', 'replace')
'abc?123'
>>>
据推测,你从数据库中获取utf8字符串,你应该将这些字符串从utf8解码为unicode字符串,然后可能在输出上重新编码它们以消耗程序输出的任何内容...通常你想要的一个类似的模型:
这使您可以清晰地分离编码/解码,并避免在整个应用程序中传播编码处理代码,因为核心只处理unicode。
答案 1 :(得分:0)
您可能想尝试string.encode('ascii').decode('utf-8')
?
答案 2 :(得分:0)
我不熟悉MySQL,但谷歌搜索提到了这个:http://dev.mysql.com/doc/refman/5.0/en/charset-applications.html。这有帮助吗?
答案 3 :(得分:0)
在从db查询之前执行conn.set_character_encoding('utf8')
。
答案 4 :(得分:-1)
只需将你的python设置为utf-8编码,你就不用再担心了。 db2 / mongodb加载数据时出现此问题。
在site.py下将defaultencoding设置为utf-8。
看看@ http://blog.ianbicking.org/illusive-setdefaultencoding.html