出于调试目的,我正在尝试记录包含unicode字符串的内容字典:
logging.info(str(data))
data
具有以下结构:
{'whatever®': 1}
显然,在调用str()
时,UnicodeEncodeError
会爆炸,因为它会尝试使用引擎盖下的ASCII编解码器将®符号转换为字节字符串。
由于dict
个实例没有__unicode__
个方法,除了为这种方法编写自己的toString
函数之外,最好的方法是实现我正在尝试做的事情。永远不会将unicode字符串转换为字节串的数据?在stdlib或我可以使用的任何外部库中是否有我不知道的实用程序函数?
答案 0 :(得分:0)
repr()
函数对于测试和调试很有用,它似乎适合于日志记录:logging.info(data)
应该按原样运行。
str(dict_object)
应该调用repr(dict_object)
以递归方式调用repr()
的dict键和值,这不会引发UnicodeEncodeError
错误(结果只包含Python上可打印的ascii字符) 2)。
可能的解释是UnicodeEncodeError
在显示Unicode内容期间发生(问题中没有 - 示例中有一个字节串,除非您使用Python 3或from __future__ import unicode_literals
)因为语言环境是未配置(检查LANG
,LC_CTYPE
,LC_ALL
envvars)或脚本的输出被重定向到管道文件(在这种情况下设置PYTHONIOENCODING
envvar)。