所以我想通过写字母的十六进制值来打印希伯来语(或任何其他语言),解码并打印到终端
这就是我尝试的,我从https://en.wikipedia.org/wiki/Code_page_862获得了cp862的代码页,并试图打印第一个字母。它输出其他东西,而不是想要的结果
我做错了什么
letter = b'\x05\xD0'
print(letter.decode('cp862'))
输出:
wahalez@wahalez:~/dev/python$python p25.py
╨
我什么时候使用编码,什么时候使用解码
编辑:
另一个奇怪的行为是,我交换了字节并将其解码为utf-16,结果成功了。为什么
letter2 = b'\xD0\x05'
print(letter2.decode('utf-16'))
你误读了那张图表。值
0x05D0
是该字符的unicode代码点。值0x80
是CP862值(请参见右侧的8_
和顶部的_0
)。所以如果你要写:你会得到你想要的
我不完全清楚你想做什么。如果只想使用表中的字符,可以复制并粘贴它。例如:
没有必要乱搞编码或解码
如果要从特定的unicode代码点生成字符,只需使用
chr
函数:ord()
使用单个字符并返回一个表示字符代码点的整数print([chr(i) for i in range(100,120)])
ord('€')
代码点的形式为U+前缀
字母A的代码点为U+0041,欧元符号为U+20AC
如果我们用
hex()
包装ord()
,我们得到字符的十六进制表示hex(ord('A'))
hex(ord('€'))
现在,如果你从机器的角度来考虑这一点,你会认为所有这些都是用机器语言写的。因此,您需要使用机器语言将其转换为用户可以阅读的格式
b'\x41'.decode('UTF_8')
b'\x41\x00'.decode('UTF_16')
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')
"café".encode('utf_16')
'El Niño'.encode('utf_8')
因此,当实例对象是希伯来语或字符时使用
.encode()
,当实例是字节序列时使用.decode()
,例如字母a的字节序列b'\x41\x00'
在一个非常相似的行为中,类方法
bytes()
接收字符并将它们像.encode()
一样编码为字节序列bytes("El Niño", encoding = 'utf_16')
上面的所有代码都在python3.8中。在Python2中,数据类型是不同的。因此,如果您在python 2中尝试此操作,请务必小心
有一个方便的缩写;坏蛋:字节被解码,文本被编码
此外,您还将Unicode代码点与
cp862
值混淆希伯来文字母Aleph是Unicode代码点0x05D0,但在代码页862中是0x80
试试这个:
要使用unicode代码点,请尝试:
相关问题 更多 >
编程相关推荐