[英]Python Encoding error with some unicode characers
我在編碼某些Unicode字符時遇到一些問題。 這是我正在使用的代碼:
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,其中德語是默認語言(因此這些字符是默認字符)。
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
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.