将Unicode字符串转换为十六进制表示形式

7

我想将Unicode字符串转换为十六进制表示。例如,u'\u041a\u0418\u0421\u0410'应该被转换为"\xD0\x9A\xD0\x98\xD0\xA1\xD0\x90"。我尝试了下面的代码(Python 2.7):

unicode_username.encode("utf-8").encode("hex")

然而,我得到了一个字符串:
'd09ad098d0a1d090'

你有什么建议可以获取 \xD0\x9A\xD0\x98\xD0\xA1\xD0\x90 吗?

(意思是:如何获得“КИСА”)


2
不要进行第二次编码。unicode_username.encode("utf-8") -> '\xd0\x9a\xd0\x98\xd0\xa1\xd0\x90' - DYZ
第二个编码在Python3中无法工作,因为第一个编码返回的字节对象没有任何.encode()方法。使用unicode_username.encode('utf-8').hex()来获取十六进制ASCII文本字符串。 - TheDiveO
2个回答

10

当你执行 string.encode('utf-8') 时,它会变为十六进制表示。

但是如果你打印它,你将得到原始的Unicode字符串。

如果你想要十六进制表示,你可以使用 repr() 函数获取:

>>> print u'\u041a\u0418\u0421\u0410'.encode('utf-8')
КИСА
>>> print repr(u'\u041a\u0418\u0421\u0410'.encode('utf-8'))
'\xd0\x9a\xd0\x98\xd0\xa1\xd0\x90'

1
你也可以尝试:

print "hex_signature :  ",'\\X'.join(x.encode("hex") for x in signature)

使用分隔符'\X'的join函数,以便在每个字节转换为十六进制时插入\X。在循环中对变量签名的每个字节执行join函数。所有内容都被连接/串联并打印。


1
感谢您提供这段代码片段,它可能会提供一些有限的、即时的帮助。通过展示为什么这是一个好的解决方案,适当的解释将极大地提高其长期价值,并使其对未来具有类似问题的读者更有用。请编辑您的答案,添加一些解释,包括您所做的假设。 - Toby Speight

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接