我正在經歷我生命中最奇怪的錯誤。__str__返回UnicodeEncodeError,但其他作品(u' xa0')
我修我Hacker News API這一小段代碼是給我頭痛:
from hn import HN
hn = HN()
# print top stories from homepage
for story in hn.get_stories():
print story.title
print story
Story
類__str__
方法如下:
def __str__(self):
"""
Return string representation of a story
"""
return self.title
(這是從一點點不同代碼在回購。我不得不在這裏調試。)
反正,輸出是這樣的:
Turn O(n^2) reverse into O(n)
Turn O(n^2) reverse into O(n)
My run-in with unauthorised Litecoin mining on AWS
My run-in with unauthorised Litecoin mining on AWS
Amazon takes away access to purchased Christmas movie during Christmas
Traceback (most recent call last):
File "my_test_bot.py", line 11, in <module>
print story
UnicodeEncodeError: 'ascii' codec can't encode character u'\xa0' in position 60: ordinal not in range(128)
我不知道爲什麼這是失敗的。 __str__
和print story
語句都打印一個unicode。那麼爲什麼後者不起作用?
另外,做print unicode(story)
工作得很好(爲什麼??),但不幸的是我不能使用unicode()
,因爲它不是py3兼容。
title
編碼爲:title.encode('cp850', errors='replace').decode('cp850')
到底發生在這裏?我如何確保我的API可以用於任何可以找到的字符串(也就是大多數字符串),並且兼容py2和py3?
我有downloaded the page現在正在導致這個錯誤離線調試。
你應該使用'str.encode'和'str.decode'方法。要麼你只使用字節數組(py2樣式),我不推薦使用unicode字符串(使用'str.encode'或'print(u「Hello」)')。順便說一句,如果你想要兼容py2和py3,請使用print作爲函數而不是關鍵字。目前,您的問題是您嘗試使用ascii編碼解碼器解碼unicode字符串,而這將永遠不會工作。Ever::P – Depado