encode方法如何在Python中返回非十六进制代码点?

2024-06-26 00:07:00 发布

您现在位置:Python中文网/ 问答频道 /正文

当我检查它的代码点gb18030时,有一些特殊的中文单词,如“觱”、“踨”,如下所示。在

>>>u'觱'.encode('gb18030')
'\xd3v'

我对代码点'\xd3v'感到困惑。它不是正确的十六进制数字。
谁能解释清楚?在

实际上,我有一个任务是把gb18030的代码点转换成
它对应的unicode编码。在

>>>'CDF2'.decode('hex').decode('gb18030')
u'\u4e07'

但是

>>>'d3v'.decode('hex').decode('gb18030')

Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "/usr/lib/python2.7/encodings/hex_codec.py", line 42, in hex_decode
        output = binascii.a2b_hex(input)
    TypeError: Odd-length string

所以,我不明白为什么encode方法返回一个非十六进制码位。
例如,'\xd3v'的'v'是什么意思?在


Tags: 代码in编码lineunicode数字单词encode
2条回答

只有一个“v”——“gb18030”编码中编码的字符用两个字节表示,一个是“\xd3”-dec 211-,另一个是dec-118。python2.x在显示字节字符串表示形式时的默认行为是将32-127的ASCII rabge中的字节显示为ASCII编码,而超出此范围的字符则显示为2位heexadecimal转义符。在

Thus:
>>> a = u'觱'.encode('gb18030')
>>> ord(a[0])
211
>>> ord(a[1])
118

现在,如果您在gb18030终端中编辑它,只需看到实际的STR表示而不是repr,就会显示原始汉字。在

^{pr2}$

'\xd3v' == '\xd3\x76'。Python将ASCII可打印文件(包括\n\t,…)打印为字母,而不是十六进制格式。在

>>> '\xd3v' == '\xd3\x76'
True

如果您想获得六进制格式,请使用encode('hex')(与解码相同)

^{pr2}$

或使用binascii.hexlify

>>> binascii.hexlify(u'觱'.encode('gb18030'))
'd376'

相关问题 更多 >