Python - unicode字符串的元组,编码错误

时间:2013-10-21 09:54:31

标签: python mysql macos utf-8

我正在使用存储过程从mysql数据库中获取一些行。

我使用非常基本的语法:

retarr = []
cursor.callproc("employee_get", (-1, -1, -1))
for res in cursor.stored_results():
    retarr.append(res.fetchall())
cursor.close()
...

现在。一些数据结果是unicode字符串。我在我的数据库中使用UTF-8编码字符串。 我在连接中使用charset =“utf8”和use_unicode = True。

当我尝试打印包含unicode字符的任何捕获数据(整个数据元组)时,会出现问题。 像:

for row in retarr[0]:
    print(row)

它正确打印了第一个捕获的行。但第一个没有unicode角色。然后是第二个,我得到的是一个着名的错误: UnicodeEncodeError:'ascii'编解码器不能编码位置19的字符'\ u0119':序号不在范围内(128)。 有什么问题?我相信我错过了一些非常基本的东西。

我使用Python 3.3.2,标准的mysql连接器。 OSX。

2 个答案:

答案 0 :(得分:1)

要打印unicode对象,需要以某种方式对其进行编码。如果您的默认编码是ASCII,则对于128个ASCII字符之外的任何内容都将失败。您可能需要指定编码:

print(row.encode('utf-8'))

答案 1 :(得分:1)

问题在于PYTHONIOENCODING环境变量。 当我在/etc/launchd.conf中设置它(我的文件系统中没有文件)并重新启动我的系统时,所有问题都消失了。