簡體   English   中英

帶有某些Unicode字符的Python編碼錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM