【问题标题】:Converting unicode string to hexadecimal representation将 unicode 字符串转换为十六进制表示
【发布时间】:2017-05-16 04:39:40
【问题描述】:

我想将 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

【问题讨论】:

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

标签: python python-2.7 unicode


【解决方案1】:

当您执行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'

【讨论】:

    【解决方案2】:

    你也可以试试:

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

    连接函数与分隔符 '\X' 一起使用,因此对于每个字节到十六进制的转换,都会插入 \X。连接函数是针对循环中变量签名的每个字节完成的。一切都被连接/连接和打印。

    【讨论】:

    • 感谢您提供此代码 sn-p,它可能会提供一些有限的即时帮助。一个正确的解释would greatly improve 它的长期价值通过展示为什么这是一个很好的解决问题的方法,并将使它对未来有其他类似问题的读者更有用。请edit您的回答添加一些解释,包括您所做的假设。
    猜你喜欢
    • 2016-05-10
    • 2014-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-12
    • 2018-01-31
    • 2012-07-30
    相关资源
    最近更新 更多