3
我投了一些Python代码中,我现在看到的错误日志:如何在Python中使用.encode('utf-8')?
Traceback (most recent call last):
File "./app/core.py", line 772, in scrapeEmail
l.info('EMAIL SUBJECT: ', header['value'])
File "./app/__init__.py", line 44, in info
logging.info(str(datetime.utcnow()) + ' INFO ' + caller.filename + ':' + str(caller.lineno) + ' - ' + ' '.join([str(x) for x in args]))
UnicodeEncodeError: 'ascii' codec can't encode character u'\xea' in position 25: ordinal not in range(128)
我猜意味着header['value']
包含不同编码的字符。
我搜索了周围,this SO answer建议“将.encode('utf-8')
放在最近版本的Python对象的末尾”。
这提高了我两个问题:
- 在什么对象,我需要使用
.encode('utf-8')
。在x
或str(x)
。那么应该是str(x.encode('utf-8'))
还是str(x).encode('utf-8')
? - 作者用“最近的Python版本”来表示什么?我仍然可以在Python
2.7
中使用.encode('utf-8')
?
通常我会试一下,但是找到发生错误的字符串并不容易(实际上不可能)。所以我不能真正测试它。
这里有一点帮助,将不胜感激。
为1),除非你的对象x实现方法'encode',你使用它的字符串(其中有一个方法'.encode') – DainDwarf
这个答案是不相关的你;在字符串调用结束时随机放置编码不太可能有所帮助。问题是更有可能的是你已经覆盖用自己的实现,它不会做正确的事'info'方法。关于在日志消息中放入什么的决定属于[格式化程序](https://docs.python.org/2/library/logging.html#logging.Formatter),而不是记录程序子类。 –
您是否尝试过使用Unicode( '东西'),而不是STR( '东西')? – pazitos10