0

我正在使用存储过程从 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' codec can't encode character '\u0119' in position 19: ordinal not in range (128). 有什么问题?我相信我缺少一些非常基本的东西。

我使用 Python 3.3.2,标准 mysql 连接器。操作系统。

4

2 回答 2

1

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

print(row.encode('utf-8'))
于 2013-10-21T10:09:45.913 回答
1

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

于 2013-10-21T13:48:59.300 回答