2015-02-11 27 views
1

我在編碼一些unicode字符時遇到了一些問題。 這是我使用的代碼:一些unicode特性的Python編碼錯誤

test = raw_input("Test: ") 
print test.encode("utf-8") 

當我現在用的普通的ASCII字符它的工作原理,同樣的一些「奇怪」的Unicode字符像☃。 但是當我使用的字符,如ß ä ö ü §它不能創造這樣的錯誤:

Traceback (most recent call last): 
    File "C:\###\Test.py", line 5, in <module> 
    print test.encode("utf-8") 
UnicodeDecodeError: 'ascii' codec can't decode byte 0xdf in position 0: ordinal not in range(128) 

請注意,我用的是PC,其中德國是默認的語言(所以這些字符是默認的字符)。

回答

4

raw_input()返回一個字節字符串。您不需要編碼該字節字符串,它已經編碼爲

然後會發生什麼呢,Python將首先解碼得到一個unicode值進行編碼;你問Python編碼,所以它會很好的嘗試給你一些可以編碼的東西。這是在這裏失敗的解碼。隱式解碼使用ASCII,這就是爲什麼你得到了一個UnicodeDecodeError例外(注意名稱中的Decode)該編解碼器。

如果你想產生一個unicode對象,你必須明確解碼。使用的編解碼器Python有stdin檢測:

import sys 

test = raw_input("Test: ") 
print test.decode(sys.stdin.encoding) 

你不需要做這裏因爲你要打印,所以寫右後衛,這將使用相同的編解碼器的輸入和輸出相同的終端。剛剛收到該字節字符串時,編寫用UTF-8編碼的字節字符串就沒有問題了。解碼到unicode也不錯,因爲打印將自動編碼爲sys.stdout.encoding