Python转换Unicode-Hex字符串为Unicode

2024-10-06 08:07:58 发布

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

我有一个由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字符串。

提前多谢!


Tags: 字符串in功能for字节defunicode符号
3条回答

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

做不到。使用%02X会丢失太多信息。您应该先使用类似UTF-8的东西并转换它,而不是发明一个损坏的编码。

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

这似乎很管用:

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

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

相关问题 更多 >