Python:将Unicode十六进制字符串转换为Unicode


问题内容

我有一个用该函数的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字符串。

提前非常感谢您!


问题答案:

这似乎很好用:

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

回到原始对象。如果中文文本编码正确,您也可以这样做,但是ord(x)已经破坏了您开始使用的文本。您需要先对其进行编码,然后才将其视为一串字节。