2012-10-24 112 views
1

我有一個wx和python的問題,它似乎是一個unicode。python wx unicode編碼

我使用的是Portable Python 2.7.2.1和wx-2.8-msw-unicode。

在故障點我的Python代碼是這樣的語句:

listbox.AppendText("\n " + dparser.parse(t['created_at']).strftime('%H-%M-%S') + " " +t['text'] + "\n") 

t['text']

has a value: "RT @WebbieBmx: 「@AlexColebornBmx: http://t.co/cN6zSO69 」watch this an #retweet"

它印在我從中運行蟒蛇顯示爲DOS窗口時:

'RT @WebbieBmx: \xe2\x80\[email protected]: http://t.co/cN6zSO69 \xe2 \x80\x9dwatch this an #retweet'

追溯是:

Traceback (most recent call last): File "myprogs\Search_db_dev.py", line 713, in onSubmit self.toField.GetLineText(0)) File "F:\Portable\Portable Python 2.7.2.1\App\myprogs\process_form2_dev.py", l ine 575, in display_Tweets

listbox.AppendText("\n " + dparser.parse(t['created_at']).strftime('%H-%M-% 
S') + " " +t['text'] + "\n") 

File "F:\Portable\Portable Python 2.7.2.1\App\lib\site-packages\wx-2.8-msw-uni code\wx_controls.py", line 1850, in AppendText

return _controls_.TextCtrl_AppendText(*args, **kwargs) 

File "F:\Portable\Portable Python 2.7.2.1\App\lib\encodings\cp1252.py", line 1 5, in

decode return codecs.charmap_decode(input,errors,decoding_table) 

UnicodeDecodeError: 'charmap' codec can't decode byte 0x9d in position 73: chara cter maps to undefined

UnicodeDecodeError似乎出現在右雙引號(\ xe2 \ x80 \ x9d)的末尾,但我看不到原因。我會很感激任何幫助。

這可能是一個簡單的編碼問題,恐怕

回答

0

是的,這是一個簡單的編碼問題。

你不明白爲什麼你的字體不能區分u'」'u'"'。前者是一個捲曲的封閉引號,以UTF-8編號爲'\xe2\x80\x9d'。當你在一個編輯器(如MS Word)中編輯一個文本文件時,通常會發生這種情況,該文件會執行「智能引用」。

但現在你發現問題很好,否則,一切似乎工作,直到你把你的腳本給一些中國用戶...

無論如何,這裏的問題是,你有一些代碼存儲UTF-8字符串,以及一些其他代碼試圖訪問它們就好像它們處於默認編碼(您的Windows OEM字符集)一樣。沒有看到更多的代碼,很難確定你到底做錯了什麼,但希望這是足夠的信息讓你跟蹤它。

+0

abarnet 非常感謝您的評論。根據你所說的,當我得到UnicodeDecodeError時,在使用listbox.AppendText之前,我用text.decode('utf-8')改變了文本。這給了unicode結果和listbox.AppendText很高興顯示這一點。 – user1772547

2

當我查看回溯時,引用了cp1252類型,因爲文本是utf8(正如處理推文文本時的預期)。左邊的(\ xe2 \ x80 \ x9c )似乎不會引起問題,但在第二個十六進制序列中的\ xe2後面會出現一個空格,這會阻止它正確解碼utf8。當我刪除該空間時,解碼問題消失。所以你有一些不好的utf8,我不知道你如何防止除了在try語句中的顯式解碼,當你從原始源接收它時。這有意義嗎?

+0

彼得 很多感謝評論。當我發佈信息時,似乎錯誤地進入了這個空間,而且在我的數據中並不存在。因此,雖然我認爲我有前進的方向(請參閱下面的簡短回覆),但我很想知道您在做什麼使解碼問題消失。 – user1772547