如何将'\ x'转义字符串转换为相应单个字符的列表?

时间:2018-01-01 04:31:33

标签: python escaping ascii special-characters python-3.5

我有这样的ASCII字符串:

'\\xaa\\xaa\\x02\\xba\\x04A\\xaa\\xaa\\x02\\xbc\\x05>\\xaa\\xaa\\x04\\x80\\x02\\xf8\\x00\\x85\\xaa\\xaa\\x04\\x80\\x02\\xf8'

我想将这些字符串转换为列表,其中列表的每个元素都是ASCII字符,字符的顺序和值从原始字符串中保存:

['\xaa', '\xaa', '\x02', '\xba', '\x04', 'A', '\xaa', '\xaa', '\x02', '\xbc', '\x05', '>', '\xaa', '\xaa', '\x04', '\x80', '\x02', '\xf8', '\x00', '\x85', '\xaa', '\xaa', '\x04', '\x80', '\x02', '\xf8']

如果每个字符都是\xa0形式(表示十六进制字节),那么这不会太困难,但有时ASCII转义字符如\n换行符和\\反斜杠是包括在内。这抛弃了我写的转换器方法。

是否有一个简单的内置功能可以满足我的需求?或者我可以下载一些包吗?或者有人有简单的代码解决方案吗?

1 个答案:

答案 0 :(得分:0)

你看起来有一个包含另一个字符串的Python表示的字符串。解码的一种方法是将codecs.decode()unicode_escape encoding一起使用:

>>> s = '\\xaa\\xaa\\x02\\xba\\x04A\\xaa\\xaa\\x02\\xbc\\x05 ... \\x02\\xf8'
>>> import codecs
>>> t = codecs.decode(s, 'unicode_escape')
>>> t
'ªª\x02º\x04Aªª\x02¼\x05 ... \x02ø'

请注意,尽管可打印的非ASCII字符在此处按原样表示,而不是\xNN转义,但它们与这些转义字面完全相同:

>>> 'ª' is '\xaa'
True

获得解码后的字符串t后,将其转换为列表非常简单:

>>> list(t)
['ª', 'ª', '\x02', 'º', '\x04', 'A', 'ª', 'ª', '\x02', '¼', '\x05', ..., '\x02', 'ø']

但是:我不知道为什么你需要首先解码这个字符串。在很多情况下,传递repr(some_string)的结果是有意义的,所以你可能有XY Problem。你应该考虑一下,不首先生成这些repr字符串会更有意义。