当我检查它的代码点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'是什么意思?在
只有一个“v”——“gb18030”编码中编码的字符用两个字节表示,一个是“\xd3”-dec 211-,另一个是dec-118。python2.x在显示字节字符串表示形式时的默认行为是将32-127的ASCII rabge中的字节显示为ASCII编码,而超出此范围的字符则显示为2位heexadecimal转义符。在
现在,如果您在gb18030终端中编辑它,只需看到实际的STR表示而不是repr,就会显示原始汉字。在
^{pr2}$'\xd3v' == '\xd3\x76'
。Python将ASCII可打印文件(包括\n
,\t
,…)打印为字母,而不是十六进制格式。在如果您想获得六进制格式,请使用
^{pr2}$encode('hex')
(与解码相同)或使用
binascii.hexlify
:相关问题 更多 >
编程相关推荐