Python:将Unicode-Hex-String转换为Unicode

时间:2011-07-21 08:32:21

标签: python unicode hex

我有一个由具有该函数的unicode字符串构成的十六进制字符串:

def toHex(s):
    res = ""
    for c in s:
        res += "%02X" % ord(c) #at least 2 hex digits, can be more
    return res

hex_str = toHex(u"...")

这会返回一个像这样的字符串:

"80547CFB4EBA5DF15B585728"

这是一个由6个中国符号组成的序列 但是

u"Knödel"

转换为

"4B6EF664656C"

我现在需要的是将其转换回原始unicode的功能。中文符号似乎具有2字节表示,而第二个示例具有所有字符的1字节表示。所以我不能只为每个1或2字节的块使用unichr()。

我已经尝试了

binascii.unhexlify(hex_str)

但这似乎是逐字节转换并返回一个字符串,而不是unicode。我也试过了

binascii.unhexlify(hex_str).decode(...)

使用不同的格式。从来没有得到原始的unicode字符串。

提前多多谢谢你!

3 个答案:

答案 0 :(得分:3)

这似乎工作正常:

binascii.unhexlify(binascii.hexlify(u"Knödel".encode('utf-8'))).decode('utf-8')

回到原始对象。如果正确编码,您可以对中文文本执行相同操作,但是ord(x)已经破坏了您开始的文本。您需要先对其进行编码,然后再将其视为一串字节。

答案 1 :(得分:1)

无法完成。使用%02X会丢失太多信息。你应该首先使用类似UTF-8的东西并转换它,而不是发明破碎的编码。

>>> u"Knödel".encode('utf-8').encode('hex')
'4b6ec3b664656c'

答案 2 :(得分:0)

当我在VB应用程序中使用Unicode时,如果它们是“0”,则会删除前1或2位数字。意思是“& H00A2”会自动转换为“& HA2”,我只是创建了一个小函数来检查字符串的长度,如果它少于4个字符,则添加缺少的0。我不确定这是不是发生在你身上的事情,但我想我会把一些信息作为一些需要注意的事情。