2011-11-26 74 views
1

我有以下問題。如果我在Eclipse中運行我的應用程序它工作正常,但是當我在獨立debuger運行它 - 我有以下錯誤:奇怪的unicode問題

UnicodeEncodeError: 'ascii' codec can't encode character u'\u0144' in position 7: ordinal not in range(128)

我怎樣才能解決呢?

我的代碼片段:

x = x.replace("Ł", "L") 
+0

在print'type(x),repr(x)';前面加上你的片段。告訴我們結果 –

回答

3

猜測的基礎上,提供(不足)的信息:

你正在運行的Python 2.x版本

[猜] xstr對象。

[猜測] Eclipse將默認編碼設置爲UTF-8。

「標準調試器」將默認編碼設置爲ascii。

結果:圖示。

解決方案(與Unicode的工作標準作業程序):

  • 在輸入時,將所有str對象'萬國碼。
  • 使用Unicode。
  • 在輸出上,使用輸出的消費者期望的任何編碼對所有對象進行編碼。

重要更新其實如果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;這個信息有幫助嗎?

+0

通過執行x = x.decode('utf-8')解決之前,謝謝 – Djent

2

嘗試添加# -*- coding: utf-8 -*-到文件的頂部,使Python解釋其意識到編碼的文件使用,在我的例子UTF-8。您也可以通過使用BOM標題保存文件來完成此操作。不知道Eclipse如何提示編碼,但他們可能以某種方式使用sys.setdefaultencoding()

您可以在Python手冊中閱讀有關source code encoding的更多詳細信息。

+0

在第一行得到了編碼,eclipse和python debuger中的代碼是相同的 – Djent

+1

您必須確保'coding:'行匹配編輯器保存文件的實際編碼。或者更好的是,用'「\ x ??」'替換那個非ascii字符?是你的'x'變量編碼中的十六進制字符代碼。 – yak