我正在管理一些Python代码,我现在在日志中看到错误:
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']
包含不同编码的字符.
我四处搜索,这个SO答案暗示"将.encode('utf-8')
最近版本的Python 放在对象的末尾".
这给我提出了两个问题:
我需要使用什么对象.encode('utf-8')
.开x
或关str(x)
.它应该是str(x.encode('utf-8'))
或者在str(x).encode('utf-8')
?
作者对"最新版本的Python"的意思是什么?我还可以.encode('utf-8')
在Python中使用2.7
吗?
通常我会尝试它,但找到发生错误的字符串并不容易(实际上是不可能的).所以我无法真正测试它.
这里会有一点帮助.
我建议您首先要清楚地了解unicode与其他编码格式(例如GB2312,GBK)之间的关系.很快就没有编码和解码的主要问题:)
下图将向您展示这种关系,一旦掌握了主要内容,您将知道何时以及如何在代码中进行编码和解码.:)
--------- ----------- ---------- | | 1.decode(A) | | 2.encode(B) | | | A | -----------> | unicode | ----------->| B | | | <----------- | | <---------- | | | | 4.encode(A) | | 3.decode(B) | | --------- ----------- ----------
因此,根据图表,您应该知道现在的编码,以及要转换的编码,然后按照图表所示的关系进行操作.