我有以下問題。如果我在Eclipse中運行我的應用程序它工作正常,但是當我在獨立debuger運行它 - 我有以下錯誤:奇怪的unicode問題
UnicodeEncodeError: 'ascii' codec can't encode character u'\u0144' in position 7: ordinal not in range(128)
我怎樣才能解決呢?
我的代碼片段:
x = x.replace("Ł", "L")
我有以下問題。如果我在Eclipse中運行我的應用程序它工作正常,但是當我在獨立debuger運行它 - 我有以下錯誤:奇怪的unicode問題
UnicodeEncodeError: 'ascii' codec can't encode character u'\u0144' in position 7: ordinal not in range(128)
我怎樣才能解決呢?
我的代碼片段:
x = x.replace("Ł", "L")
猜測的基礎上,提供(不足)的信息:
你正在運行的Python 2.x版本
[猜] x
是str
對象。
[猜測] Eclipse將默認編碼設置爲UTF-8。
「標準調試器」將默認編碼設置爲ascii。
結果:圖示。
解決方案(與Unicode的工作標準作業程序):
str
對象'萬國碼。重要更新其實如果x
是UTF-8編碼的str
對象,你應該得到的消息像UnicodeDecodeError: 'ascii' codec can't decode byte 0xc5 in position 7: etc etc
。
請注意,您的實際錯誤消息表示UnicodeEncodeError: 'ascii' codec can't encode character u'\u0144' in position 7: etc etc
這表明無論它抱怨的是(a)一個unicode
對象(b)至少8個字符長。但是你實際上說x
不是unicode
對象(否則x.decode('utf8')會失敗),另外兩個replace
的參數只有1個字符長。因此我們不可能。
爲了幫助解決此問題:
print type(x), repr(x) # for Python 2.x
Lstroke = "Ł"
print type(Lstroke), repr(Lstroke)
y = x.replace(Lstroke, 'L')
和編輯您的問題,說明你跑的實際代碼加上完整的錯誤信息和回溯。
順便說一句:u'\ u0144'是拉丁字母小寫字母N;這個信息有幫助嗎?
通過執行x = x.decode('utf-8')解決之前,謝謝 – Djent
嘗試添加# -*- coding: utf-8 -*-
到文件的頂部,使Python解釋其意識到編碼的文件使用,在我的例子UTF-8。您也可以通過使用BOM標題保存文件來完成此操作。不知道Eclipse如何提示編碼,但他們可能以某種方式使用sys.setdefaultencoding()
?
您可以在Python手冊中閱讀有關source code encoding的更多詳細信息。
在print'type(x),repr(x)';前面加上你的片段。告訴我們結果 –