2011-08-06 36 views
0

我有一些口音問題。Python utf-8口音問題

我做了一個python腳本,它從某些輸入(IMAP獲取)獲取單詞「refeiâo」,這個單詞是葡萄牙語,我需要將它轉換爲人類可讀的。解碼後,它應該會出現像「refeição」但我沒有得到這個結果...

>>> print a 
refeição 
>>> ENCODING = locale.getpreferredencoding() 
>>> print ENCODING 
UTF-8 
>>> print a.encode(ENCODING) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 5: ordinal not in range(128) 
>>> a.decode('utf-8') 
u'refei\xe7\xe3o' 
>>> print a.decode('utf-8') 
refeição 

更新時間:

[email protected]:/etc/scripts# locale 
LANG=en_US.UTF-8 
LC_CTYPE="en_US.UTF-8" 
LC_NUMERIC="en_US.UTF-8" 
LC_TIME="en_US.UTF-8" 
LC_COLLATE="en_US.UTF-8" 
LC_MONETARY="en_US.UTF-8" 
LC_MESSAGES="en_US.UTF-8" 
LC_PAPER="en_US.UTF-8" 
LC_NAME="en_US.UTF-8" 
LC_ADDRESS="en_US.UTF-8" 
LC_TELEPHONE="en_US.UTF-8" 
LC_MEASUREMENT="en_US.UTF-8" 
LC_IDENTIFICATION="en_US.UTF-8" 
LC_ALL= 

此外,論文字插入一個MySQL數據庫和「不可讀」字符以與終端相同的方式顯示。 表排序規則是utf8_general_ci

+0

你是什麼操作系統? –

回答

2

它看起來像在單字節終端窗口中顯示的文本ISO-8859-1字符集,(「拉丁-1」),但你的Python解釋器認爲終端來講UTF -8。我們可以從u'refei\xe7\xe3o'中看到,Python具有正確的內部表示葡萄牙語字母。顯然,打印命令然後將內部表示轉換爲UTF-8並將其發送到您的終端,當終端將該UTF-8解釋爲ISO-8859-1時,會產生亂碼。

解決的辦法是讓您的語言環境與您的終端正在做什麼相匹配 - 通過更改語言環境或確保您的終端是utf-8。

+0

你好的Henning,我的終端被配置爲使用UTF-8: 根@ ticuna:在/ etc /腳本語言環境#LANG =的en_US.UTF-8 LC_CTYPE = 「的en_US.UTF-8」 LC_NUMERIC =「的en_US.UTF -8" LC_TIME = 「的en_US.UTF-8」 LC_COLLATE = 「的en_US.UTF-8」 LC_MONETARY = 「的en_US.UTF-8」 LC_MESSAGES = 「的en_US.UTF-8」 LC_PAPER =「的en_US.UTF -8" LC_NAME = 「的en_US.UTF-8」 LC_ADDRESS = 「的en_US.UTF-8」 LC_TELEPHONE = 「的en_US.UTF-8」 LC_MEASUREMENT = 「的en_US.UTF-8」 LC_IDENTIFICATION =「的en_US.UTF -8「 LC_ALL = – Thomas

+0

@Thomas:這並不表明你的終端只配置在該shell中運行的應用程序的行爲。 –

+0

@Ignacio,那麼線索是什麼?當我更新我的問題時,我將這個文本插入到mysql中時遇到同樣的問題。 – Thomas