簡體   English   中英

使用UTF-8的Python Unicode編碼

[英]Python unicode encoding using UTF-8

我一直在閱讀有關unicode的python 教程 ,並且有一個簡單的問題要問:當我打開python shell並鍵入時:

>>> unicode('\x80abc')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0x80 in position 0: ordinal
not in range(128)

由於python嘗試使用ascii編碼將字節\\ x80轉換為unicode,因此我得到了上述錯誤,該錯誤可以達到127。(\\ x80為128)。

但是,如果我再次嘗試使用utf-8編碼,盡管有所不同,但我仍然收到錯誤消息:

>>> unicode('\x80abc', 'utf8')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python27\lib\encodings\utf_8.py", line 16, in decode
return codecs.utf_8_decode(input, errors, True)
UnicodeDecodeError: 'utf8' codec can't decode byte 0x80 in position 0: invalid s
tart byte

這是怎么回事,我應該如何正確處理?

碰巧\\x80也不是UTF-8中的有效字節。

看一下UTF-8的字符集 ,看一字節代碼在\\x7f完成。

如果要證明您的示例,請嘗試使用latin1ñ字符: unicode('\\xf1abc','latin1') 如果沒有編碼,它將失敗並通過。

首先, '\\x80abc'是一個字節字符串(在Python <3中)。 如果要將字節字符串轉換為unicode字符串,則有兩個選擇: 所有字節重新解釋為單字節unicode字符(您可以簡單地將u前綴為字符串文字,然后: u'\\x80abc' ),或者假設字節字符串是使用特定編解碼器(如ASCII,Latin1,UTF-8等)編碼的unicode字符串; 那么您將按照自己的嘗試進行:通過解碼

調用unicode()是一個顯式解碼。 正如Paulo所指出的, \\80在UTF-8中無效,因為在ASCII中無效。 但是,您可以嘗試使用Latin1,因為它允許在其流中使用\\x80字節,因此可以使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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