转义utf8解码('\ x74'到't')

时间:2012-08-13 16:32:55

标签: python utf-8

我有这个字符串"\x00\x12\xf8\x05\x74\xa2",结果如下:

>>> s = "\x00\x12\xf8\x05\x74\xa2"
>>> s
'\x00\x12\xf8\x05t\xa2'
>>> print s
?t?
>>> print repr(s)
'\x00\x12\xf8\x05t\xa2'


>>> s = r"\x00\x12\xf8\x05\x74\xa2" <=== (I want this result but cannot use r'')
>>> s
'\\x00\\x12\\xf8\\x05\\x74\\xa2'
>>> print s
\x00\x12\xf8\x05\x74\xa2

您可以看到字符串中的'\x74'在前半部分输出中自动转换为相应的utf8字符't'。我实际上有一个自定义字典来进行解码,所以我不希望这种自动转换。

最好是在后半部分输出中保持字符串与r'string'相同。显然repr不起作用,还有其他办法吗?

更新:我想要这个,因为我需要将hh中的\xhh转换为整数。

提前致谢。

3 个答案:

答案 0 :(得分:3)

  

更新:我想要这个,因为我需要将每个\ xhh中的hh转换为   int number。

>>> s = "\x00\x12\xf8\x05\x74\xa2"
>>> [ord(x) for x in list(s)]
[0, 18, 248, 5, 116, 162]

答案 1 :(得分:3)

  

我想要这个,因为我需要将每个\ xhh中的hh转换为int   号。

In [17]: s = "\x00\x12\xf8\x05\x74\xa2"

In [18]: list(bytearray(s))
Out[18]: [0, 18, 248, 5, 116, 162]
关于字节数组的使用的

This article可能是您感兴趣的。

答案 2 :(得分:1)

您可以手动创建所需的表示形式,如下所示:

>>> s = '\x00\x12\xf8\x05\x74\xa2'
>>> r = ''.join(['\\x%02x' % ord(b) for b in s])
>>> r
'\\x00\\x12\\xf8\\x05\\x74\\xa2'
>>> print r
\x00\x12\xf8\x05\x74\xa2

根据您的更新,如果您只想要ord值,请删除原始答案的一小部分:

>>> [ord(b) for b in s]
[0, 18, 248, 5, 116, 162]