猿问

与编码和解码混淆

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

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

我做错了什么?

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

输出:

wahalez@wahalez:~/开发/蟒蛇$ 蟒蛇 p25.py

何时使用编码,何时使用解码?

编辑:

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

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



翻过高山走不出你
浏览 142回答 3
3回答

慕姐4208626

你误读了那张图表。该值是该字符的 unicode 代码点。该值是 CP862 值(请参阅右侧和顶部的?)。所以如果你要写:0x05D00x808__0>>> letter = b'\x80'>>> print(letter.decode('cp862'))א你会得到你想要的。我怎么能使用统一码来代替?用什么编码?我不完全清楚你想做什么。如果您只想使用表格中的字符,只需复制并粘贴即可。例如:letter = 'א`没有必要纠结编码或解码。如果要从特定的 unicode 代码点生成字符,只需使用以下函数:chr>>> print(chr(0x05d0))א

HUX布斯

在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中尝试此操作,请谨慎行事

catspeake

    有一个方便的缩写;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]: 'א'
随时随地看视频慕课网APP

相关分类

Python
我要回答