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