ids = cPickle.loads(gem.value)
loads() argument 1 must be string, not unicode
1
A
回答
8
cPickle.loads
想要一個字節串(這正是cPickle.dumps
輸出)和你重新餵它一個unicode字符串。您需要對該Unicode字符串進行「編碼」以獲取dumps
最初給予您的字節字符串,但很難猜測您無意中對其施加了什麼編碼 - 可能是latin-1
或utf-8
(如果ascii
不擔心,這兩者中的任何一個都會解碼它,只是很棒),也許utf-16
...?如果不知道gem
是什麼以及如何從cPickle.dumps
的輸出中最初設置它的value
...很難猜測!
-1
您可以通過將gem.value
設爲一個字符串而不是unicode來修復它。
使用str(gem.value)
+4
-1這是一個混亂,而不是修復。 str()使用默認編碼。你首先需要知道它是如何解碼的。 – 2010-05-31 22:57:19
1
的cPickle.dumps()
結果是str
對象,而不是unicode
對象。您需要在代碼中找到解碼醃製str
對象的步驟,並省略該步驟。
請勿嘗試將您的unicode
對象轉換爲str
對象。兩個錯誤是不對的。示例(Python 2.6):
>>> import cPickle
>>> ps = cPickle.dumps([1,2,3], -1)
>>> ps
'\x80\x02]q\x01(K\x01K\x02K\x03e.'
>>> ups = ps.decode('latin1')
>>> str(ups)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character u'\x80' in position 0: ordinal not in range(128)
>>>
您可以很好地利用其產生的默認(和低效的)協議0 「人類可讀」 輸出:
>>> ps = cPickle.dumps([1,2,3])
>>> ps
'(lp1\nI1\naI2\naI3\na.'
>>>
這大概是ASCII(但不記錄,以是這樣),所以str(gem.value)
雜牌完全可能「」「工作」「」:
>>> ps == str(unicode(ps))
True
>>>
相關問題
- 1. 如何解決這個python程序中的錯誤?
- 2. 如何解決這個有這個makeHttpRequest錯誤的錯誤?
- 3. 如何解決Xcode7.3的這個錯誤?
- 4. 如何解決這個錯誤的XML?
- 5. 如何解決這個錯誤的jmetere
- 6. 如何在python webscraping中解決這個錯誤?
- 7. 如何在Python中解決這個錯誤?
- 8. 當這個錯誤來了如何解決這個錯誤
- 9. 如何解決這個錯誤?
- 10. 我該如何解決這個錯誤?
- 11. 如何解決這個imageview錯誤?
- 12. 如何解決這個stringise錯誤
- 13. 如何解決這個「java.lang.IndexOutOfBoundsException」錯誤?
- 14. 如何解決這個佈局錯誤?
- 15. 我該如何解決這個錯誤?
- 16. 如何解決這個突變錯誤?
- 17. 如何解決這個編譯錯誤?
- 18. 如何解決這個錯誤?
- 19. 如何解決這個Servlet.init()錯誤?
- 20. 如何解決這個錯誤aapt.exe
- 21. 如何用healthkit解決這個錯誤?
- 22. 我該如何解決這個錯誤?
- 23. 如何解決這個'Variable DeclaratorID'錯誤?
- 24. 我該如何解決這個錯誤?
- 25. 如何解決這個jquery錯誤?
- 26. 我該如何解決這個錯誤?
- 27. 如何解決這個路由錯誤?
- 28. 如何解決這個node.js錯誤?
- 29. 如何解決這個語義錯誤?
- 30. yesod如何解決這個錯誤?
爲什麼'gem.value' unicode而不是字符串? – sth 2010-05-31 21:40:29