2012-09-02 30 views
3

我已經搜索並發現一些相關的問題,但他們處理Unicode的方式是不同的,所以我不能將解決方案應用於我的問題。Python程序在Eclipse中工作,但不是當我直接運行它(Unicode的東西)

我不會貼我的整個代碼,但我敢肯定,這個孤立的例子代碼複製錯誤: (我還使用了WX GUI所以這就像一個類的內部)

#coding: utf-8 
... 
something = u'ЧЕТЫРЕ' 
//show the Russian text in a Label on the GUI 
self.ExampleLabel.SetValue(str(self.something)) 

在Eclipse上一切正常,並顯示俄語字符。然而,當我嘗試直接通過文件,我得到的CL這個錯誤開闢的Python:

UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-11: 
ordinal not in range(128) 

我想這事做與CL不能夠輸出中的Unicode的字符和Eclipse做behind-現場魔術。有關如何使它自行工作的任何幫助?

+0

爲什麼你根本調用'str()'?我製作了一個必須處理韓文文本的GUI,並發現WxPython小部件本身支持unicode。 – acattle

+0

你是對的,我只是覺得我開始用數字開始工作,這就是爲什麼我需要str(),但後來繼續用短語,所以它卡住了。不知道你可以直接使用它。 –

+0

有一點要注意,當連接混合unicode數據類型和字符串數據類型的文本時,我遇到了一些問題,並以編碼錯誤結束。你只需要小心你在做什麼,並確保你在需要的地方施放變量。 – acattle

回答

1

嘗試用self.something.encode('utf-8')代替。

5

當您在沒有指定編碼的情況下調用str()時,將使用默認編碼,這取決於您的程序運行的環境。在Eclipse中,這與命令行不同。

不要依賴於默認的編碼,而不是明確指定:

self.ExampleLabel.SetValue(self.something.encode('utf-8')) 

你可能想學習Python Unicode HOWTO明白什麼編碼和str()與Unicode對象做。 wxPython項目也有page on Unicode usage

+0

謝謝,我實際上可以使用它。 Thansk也提供了進一步閱讀的鏈接。 :) –

+0

其實,我想我可能做錯了什麼,因爲我的變量可能是一個int或unicode字符串。對於整數,沒有編碼方法,所以我無法使用它。這是壞設計還是有辦法處理這兩種情況,因爲即使它是一個int我想把它作爲一個字符串。但是,然後使用str()的類型轉換將不適用於unicode。 –

+0

你可以做兩件事:使用'try:除了''block或者測試'if isinstance(self.something,int):'並分支你的代碼來處理這兩種情況。 –

1

如果您使用repr而不是str,它應該爲您處理轉換並且還涵蓋該對象並非總是鍵入字符串的情況,但是您可能會發現它會給您一組額外的引號或unicode你在你的情況下。 repr比str-str更安全地使用ascii編碼,但repr會以與你在代碼中看到它們相同的方式顯示你的代碼點,因爲包裝eval應該將它轉換回原來的樣子 - repr必須以python代碼的形式存在,即ascii安全,因爲大多數python代碼都是用ascii編寫的。

+0

我很高興這是目前。我有這個問題的變種(在eclipse中工作,而不是在命令行中,即使使用.encode(「utf-8」)。當我將其更改爲repr()時,它工作正常! – rydgaze

相關問題