3 回答

TA貢獻(xiàn)1852條經(jīng)驗 獲得超7個贊
你誤讀了那張圖表。該值是該字符的 unicode 代碼點。該值是 CP862 值(請參閱右側(cè)和頂部的?)。所以如果你要寫:0x05D00x808__0
>>> letter = b'\x80'
>>> print(letter.decode('cp862'))
?
你會得到你想要的。
我怎么能使用統(tǒng)一碼來代替?用什么編碼?
我不完全清楚你想做什么。如果您只想使用表格中的字符,只需復(fù)制并粘貼即可。例如:
letter = '?`
沒有必要糾結(jié)編碼或解碼。
如果要從特定的 unicode 代碼點生成字符,只需使用以下函數(shù):chr
>>> print(chr(0x05d0))
?

TA貢獻(xiàn)1876條經(jīng)驗 獲得超6個贊
在python字符串中,字節(jié)和字節(jié)序列稱為平面序列,這意味著它們已編入索引,但它們與容器化序列(如列表或元組)的類型不同,
任何字符串字符都有一個稱為代碼點的固定標(biāo)識。碼位是介于 0 和 0 到 1,114,111 之間的小數(shù)。
內(nèi)置函數(shù)采用單個字符并返回一個整數(shù),該整數(shù)表示字符的代碼點
ord()
print([chr(i) for i in range(100,120)])
['d', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w']
ord('€')
8364
代碼點的格式為 U+ 前綴
對于字母 A,代碼點是 U+0041,對于歐元符號,代碼點是 U+20AC
如果我們用他包裝,我們得到字符的十六進(jìn)制表示ord()
hex()
hex(ord('A'))
'0x41'
hex(ord('€'))
'0x20ac'
現(xiàn)在,如果你從機(jī)器的角度來考慮這個問題,想想所有這些都是用機(jī)器語言寫的。所以你用機(jī)器語言把它變成你(用戶)可讀的格式。decode()
b'\x41'.decode('UTF_8')
'A'
b'\x41\x00'.decode('UTF_16')
'A'
b'\x41' 和 b'\x41\x00' 是 utf-8 和 utf-16 編碼中字母 A 的字節(jié)序列
b'\xe2\x82\xac'.decode('UTF_8')
'€'
b'\xac\x20'.decode('UTF_16')
'€'
當(dāng)您編碼時,您將字節(jié)序列轉(zhuǎn)換回機(jī)器理解的語言。
字節(jié)序列是機(jī)器識別的碼位表示形式
.encode() 字符串到字節(jié),.decode() 字節(jié)到字符串
字符串字符和字節(jié)之間的映射使用 UTF-8(或 UTF-16,gb2312...)編碼進(jìn)行解釋
"café".encode('utf_8')
b'caf\xc3\xa9'
"café".encode('utf_16')
b'\xff\xfec\x00a\x00f\x00\xe9\x00'
'El Ni?o'.encode('utf_8')
b'El Ni\xc3\xb1o'
因此,當(dāng)實例對象是希伯來語或字符時使用,當(dāng)您的實例是字節(jié)序列(例如字母 A 的字節(jié)序列)時使用。.encode()
.decode()
b'\x41\x00'
在非常相似的行為中,class 方法采用字符并對其進(jìn)行編碼,就像編碼到字節(jié)序列中一樣。bytes()
.encode()
bytes("El Ni?o", encoding = 'utf_16')
b'\xff\xfeE\x00l\x00 \x00N\x00i\x00\xf1\x00o\x00'
上面的所有代碼都在python3.8中。在python 2中,在數(shù)據(jù)類型方面有所不同。因此,如果您在Python 2中嘗試此操作,請謹(jǐn)慎行事

TA貢獻(xiàn)1111條經(jīng)驗 獲得超0個贊
有一個方便的縮寫;BADTIE:字節(jié)被解碼,文本被編碼。
此外,您還混淆了 Unicode 代碼點與值。cp862
希伯來字母Aleph是Unicode代碼點0x05D0,但在代碼頁862中,它是0x80。
試試這個:
In [3]: b = b'\x80'
Out[3]: b'\x80'
In [4]: b.decode('cp862')
Out[4]: '?'
To use the unicode code point, try:
In [12]: chr(0x05D0)
Out[12]: '?'
添加回答
舉報