首页 > 解决方案 > 对编码和解码感到困惑

问题描述

所以我想通过编写字母的十六进制值来打印希伯来语(或任何其他语言),对其进行解码并将其打印到终端。

这是我尝试过的,我从https://en.wikipedia.org/wiki/Code_page_862获得了 cp862 的代码页并尝试打印第一个字母。它输出其他东西,而不是想要的结果。

我做错了什么 ?

letter = b'\x05\xD0'
print(letter.decode('cp862'))

输出 :

wahalez@wahalez:~/dev/python$ python p25.py

╨</p>

我什么时候使用 encode 什么时候使用 decode ?

编辑 :

另一个奇怪的行为是我交换了字节并将其解码为 utf-16 并且它起作用了。为什么 ?..

letter2 = b'\xD0\x05'
print(letter2.decode('utf-16'))

标签: python

解决方案


你误读了那个图表。该值0x05D0是该字符的unicode代码点。该值0x80是 CP862 的值(见8_右边的和_0顶部的?)。所以如果你要写:

>>> letter = b'\x80'
>>> print(letter.decode('cp862'))
א

你会得到你想要的。


我怎样才能使用 unicode 呢?用什么编码?

我不完全清楚你想做什么。如果您只想使用表格中的字符,您可以复制并粘贴它。例如:

letter = 'א`

无需为编码或解码而烦恼。

如果要从特定的 unicode 代码点生成字符,只需使用以下chr函数:

>>> print(chr(0x05d0))
א

推荐阅读