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