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

1 投票
4 回答
1943 浏览
提问于 2025-04-16 08:59

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

代码如下:

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

4 个回答

0

在从数据库查询之前,先执行 conn.set_character_encoding('utf8') 这个命令。

0

你可以试试这个方法:string.encode('ascii').decode('utf-8')

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')]

这样做可以让编码和解码的过程清晰分开,避免在你的应用程序中到处都是处理编码的代码,因为核心部分只处理unicode。

撰写回答