Python 打印成功,但日志记录模块引发异常
我试图记录一个文件的内容,但是我从日志模块(不仅仅是那个模块)得到了一些有趣的行为 以下是文件内容:Python 打印成功,但日志记录模块引发异常,python,python-2.7,logging,encoding,python-unicode,Python,Python 2.7,Logging,Encoding,Python Unicode,我试图记录一个文件的内容,但是我从日志模块(不仅仅是那个模块)得到了一些有趣的行为 以下是文件内容: "Testing …" Testing å¨'æøöä "Testing å¨'æøöä" 下面是我如何打开并记录它的: with codecs.open(f, "r", encoding="utf-8") as myfile: script = myfile.read() log.debug("Script type: {}".format(type(scri
"Testing …"
Testing å¨'æøöä
"Testing å¨'æøöä"
下面是我如何打开并记录它的:
with codecs.open(f, "r", encoding="utf-8") as myfile:
script = myfile.read()
log.debug("Script type: {}".format(type(script)))
print(script)
log.debug("{}".format(script.encode("utf8")))
记录对象类型的行在我的日志中显示如下:
Script type: <type 'unicode'>
当我从最后一行中删除.encode(“utf8”)
位时,我得到了预期的异常:
Traceback (most recent call last):
File "/usr/lib/python2.7/logging/__init__.py", line 882, in emit
stream.write(fs % msg.encode("UTF-8"))
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 63: ordinal not in range(128)
'ascii' codec can't encode character u'\u2026' in position 9: ordinal not in range(128)
这只是为了说明问题。这不仅仅是日志模块。我的其余代码在处理这个“unicode”字符串时也会抛出类似的异常
我做错了什么?日志记录可以很好地处理Unicode值:
>>> import logging
>>> logging.basicConfig(level=logging.DEBUG)
>>> script = u'"Testing …"'
>>> logging.debug(script)
DEBUG:root:"Testing …"
(写入日志文件将产生UTF-8编码的消息)
出错的地方是在使用str.format()
时混合了字节字符串和Unicode值:
哦将unicode与ASCII混合使用。。。我现在正把头撞在墙上(同时打字)。谢谢。这一定是那种日子。。。我将把它标为答案。
>>> "{}".format(script)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character u'\u2026' in position 9: ordinal not in range(128)
>>> u"{}".format(script)
u'"Testing \u2026"'