我正在使用存储过程从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。
答案 0 :(得分:1)
要打印unicode对象,需要以某种方式对其进行编码。如果您的默认编码是ASCII,则对于128个ASCII字符之外的任何内容都将失败。您可能需要指定编码:
print(row.encode('utf-8'))
答案 1 :(得分:1)
问题在于PYTHONIOENCODING环境变量。 当我在/etc/launchd.conf中设置它(我的文件系统中没有文件)并重新启动我的系统时,所有问题都消失了。