2014-10-11 43 views
0

当我查看其代码点gb18030时,会出现一些特殊的中文词语,如'觱''踨'。编码方法如何在Python中返回非十六进制代码点?

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

我一直困惑的代码点'\ xd3v'。这不是一个正确的十六进制数字。
谁能解释清楚?

其实,我有一个转换GB18030的代码点的任务,像“CDF2“F4A5”等等,到
其对应的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 

所以,我不明白为什么编码方法返回一个非十六进制代码点。
例如,'\ xd3v'的含义'v'是什么?

回答

1

'\xd3v' == '\xd3\x76'。 Python将ASCII printables(包括\n\t,...)以字母而不是十六进制格式打印出来。

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

如果你想

>>> u'觱'.encode('gb18030').encode('hex') 
'd376' 

或使用binascii.hexlify得到hexadeicmal格式,请使用encode('hex')(像你一样的解码):

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

只是一个 “V” - 字符在“gb18030”编码中编码由两个字节表示,一个是“\ xd3” - dec 211 - 另一个是dec-118。显示字节字符串表示形式时,Python 2.x的默认行为是以32-127的ASCII rabge作为其ASCII编码显示字节,并将该范围外的字符显示为2位数字的十六进制转义字符。

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

现在,如果你正在编辑的是在GB18030终端,只看到实际的STR表示,而不是再版,会告诉你原来的中国文字。

>>> print a