从远程数据库获取UTF8字符串

时间:2010-12-24 13:22:35

标签: python mysql string decoding

我的应用程序从远程MySQL数据库下载一些数据。问题是db将字符串存储为utf8。但我收到的数据是ascii解码。怎么解决这个问题?

代码:

cursor = conn.cursor()
query = """MY QUERY HERE"""
cursor.execute(query)
result = cursor.fetchall()

5 个答案:

答案 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字符串,然后可能在输出上重新编码它们以消耗程序输出的任何内容...通常你想要的一个类似的模型:

  1. 输入数据 - 从输入编码转换为unicode [string.decode('utf8')]
  2. 处理数据 - 仅处理unicode对象
  3. 输出结果 - 从unicode转换为输出编码[string.encode('utf8')]
  4. 这使您可以清晰地分离编码/解码,并避免在整个应用程序中传播编码处理代码,因为核心只处理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

相关问题