【发布时间】:2013-10-29 18:08:14
【问题描述】:
我正在使用存储过程从 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 连接器。操作系统。
【问题讨论】:
-
可能是你的终端系统。例如,您可以在
cmd.exe上获取UnicodeEncodeError,它在 IDLE 中可以正常工作。 -
奇怪,我用的可能是 Komodo 的问题。如果我尝试从终端(python3)简单地打印 '\u0119' 那么它可以工作,但是从 Komodo 运行它会抛出这个异常。我在首选项中将默认编码更改为 UTF-8,但它仍然不起作用。