2015-01-26 59 views
0

我正在通過websocket連接接收str數據,並嘗試刪除重音符號(以及降低文本/將''轉換爲' - '.. )Python 2.7:刪除<str>的重音 - 仍然不起作用

而且,即使有數百個問題在這裏被詢問和回答,仍然會失敗。

這裏的代碼,試圖做到這一點的一部分,解析[4] [7:]是我的文字翻譯

if parsed[4][:6]=="!strat": 
     shiftedtxt='' 
     txt=parsed[4][7:].lower().decode('unicode-escape') 
     hope=''.join((c for c in unicodedata.normalize('NFD', txt) if unicodedata.category(c) != 'Mn')) 
     for i in hope: 
      if i==' ': 
       shiftedtxt+='-' 
      else: 
       shiftedtxt+=i 
     ws.send(room+"|http://pokestrat.com/fiche_pokemon/"+shiftedtxt+".php") 

我通常試圖「Ténéfix」到「tenefix」翻譯。

如建議在本網站上的答案,我使用的是

''.join((c for c in unicodedata.normalize('NFD', txt) if unicodedata.category(c) != 'Mn')) 

方法。

當試圖一步一步:

'éô'.decode('unicode-escape') 

產生

u'\xe9\xf4' 

>>> s=u'\xe9\xf4' 
>>> ''.join((c for c in unicodedata.normalize('NFD', s) if  unicodedata.category(c) != 'Mn')) 

產量

u'eo' 

因此,事情應該..工作?但他們沒有。 例如,'ténéfix'返回'tA©nA fix',這是我無法解釋的。 爲什麼?

編輯:這裏是全碼:http://pastebin.com/aJ1Rk1pV

+1

這個問題可能是圍繞着'parsed [4] [7:]。lower()。decode('unicode-escape')' – njzk2 2015-01-26 20:56:51

+0

@ njzk2 parsed [4]是一個字符串對象, 。 parsed [:6]被檢查爲!如果驗證過,那麼解析[7:]應該是一個單詞。 它被設計成讓用戶問「!straténéfix」。也許來自websockets的字符串不是字符串? – 2015-01-26 21:02:53

+0

你沒有檢查導致問題的值的實際內容嗎? – njzk2 2015-01-26 21:04:44

回答

1
txt=parsed[4][7:].lower().decode('unicode-escape') 

您確定要解析提交的文本作爲一個Python的Unicode字符串文字的一部分嗎?這似乎不大可能。 !strat Ténéfix不包含任何Python字符串轉義(如\uNNNN,\n等)。

通過tA©nA©fix來判斷您正在接收UTF-8編碼的字節,但是您將它們解碼爲ISO-8859-1,它是unicode-escape的直通編碼。相反,請嘗試:

txt=parsed[4][7:].decode('utf-8').lower() 

將字節序列轉換爲Unicode文本後需要進行降級。

當試圖一步一步:'éô'.decode('unicode-escape')產生u'\xe9\xf4'

對於這是真的你的終端必須在發送的字符作爲éô ISO-8859-1(或類似的Windows代碼頁1252)。這是UTF-8的不同編碼,這是websocket給你的,所以結果是不同的。

+0

作品,感謝您的解答,並解釋! – 2015-01-27 00:54:50