我的应用程序从远程 MySQL 数据库下载一些数据。问题是 db 将字符串存储为 utf8。但我收到的数据是 ascii 解码的。如何解决这个问题?
编码 :
cursor = conn.cursor()
query = """MY QUERY HERE"""
cursor.execute(query)
result = cursor.fetchall()
也许一个例子是有序的——在这里我创建一个 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。
你可能想试试string.encode('ascii').decode('utf-8')
?
conn.set_character_encoding('utf8')
在从数据库查询之前做一个。
只需将您的 python 设置为 utf-8 编码,您就不必再担心了。db2/mongodb 加载数据有这个问题。
只需在 site.py 下将 defaultencoding 设置为 utf-8 即可。
看看@http://blog.ianbicking.org/illusive-setdefaultencoding.html