3 回答
TA贡献1852条经验 获得超7个赞
你误读了那张图表。该值是该字符的 unicode 代码点。该值是 CP862 值(请参阅右侧和顶部的?)。所以如果你要写:0x05D00x808__0
>>> letter = b'\x80'
>>> print(letter.decode('cp862'))
א
你会得到你想要的。
我怎么能使用统一码来代替?用什么编码?
我不完全清楚你想做什么。如果您只想使用表格中的字符,只需复制并粘贴即可。例如:
letter = 'א`
没有必要纠结编码或解码。
如果要从特定的 unicode 代码点生成字符,只需使用以下函数:chr
>>> print(chr(0x05d0))
א
TA贡献1876条经验 获得超6个赞
在python字符串中,字节和字节序列称为平面序列,这意味着它们已编入索引,但它们与容器化序列(如列表或元组)的类型不同,
任何字符串字符都有一个称为代码点的固定标识。码位是介于 0 和 0 到 1,114,111 之间的小数。
内置函数采用单个字符并返回一个整数,该整数表示字符的代码点
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
如果我们用他包装,我们得到字符的十六进制表示ord()hex()
hex(ord('A'))
'0x41'
hex(ord('€'))
'0x20ac'
现在,如果你从机器的角度来考虑这个问题,想想所有这些都是用机器语言写的。所以你用机器语言把它变成你(用户)可读的格式。decode()
b'\x41'.decode('UTF_8')
'A'
b'\x41\x00'.decode('UTF_16')
'A'
b'\x41' 和 b'\x41\x00' 是 utf-8 和 utf-16 编码中字母 A 的字节序列
b'\xe2\x82\xac'.decode('UTF_8')
'€'
b'\xac\x20'.decode('UTF_16')
'€'
当您编码时,您将字节序列转换回机器理解的语言。
字节序列是机器识别的码位表示形式
.encode() 字符串到字节,.decode() 字节到字符串
字符串字符和字节之间的映射使用 UTF-8(或 UTF-16,gb2312...)编码进行解释
"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'
因此,当实例对象是希伯来语或字符时使用,当您的实例是字节序列(例如字母 A 的字节序列)时使用。.encode().decode()b'\x41\x00'
在非常相似的行为中,class 方法采用字符并对其进行编码,就像编码到字节序列中一样。bytes().encode()
bytes("El Niño", encoding = 'utf_16')
b'\xff\xfeE\x00l\x00 \x00N\x00i\x00\xf1\x00o\x00'
上面的所有代码都在python3.8中。在python 2中,在数据类型方面有所不同。因此,如果您在Python 2中尝试此操作,请谨慎行事
TA贡献1111条经验 获得超0个赞
有一个方便的缩写;BADTIE:字节被解码,文本被编码。
此外,您还混淆了 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]: 'א'
添加回答
举报
