如何将\x转义的ASCII字符串转换为对应单个字符的列表?
解决带转义ASCII字符串转字符列表的问题
这问题我之前处理类似需求时也踩过坑,手动处理转义序列很容易漏情况,不过Python里有几个简单的方案能完美搞定:
方法一:用ast.literal_eval()(最安全可靠)
这个内置方法能正确解析所有Python支持的转义序列,包括十六进制转义(\xaa)、普通转义(\n、\\、\t),而且完全安全,不会像eval()那样执行恶意代码。
示例代码:
import ast # 你的原始字符串 input_str = '\\xaa\\xaa\\x02\\xba\\x04A\\xaa\\xaa\\x02\\xbc\\x05>\\xaa\\xaa\\x04\\x80\\x02\\xf8\\x00\\x85\\xaa\\xaa\\x04\\x80\\x02\\xf8' # 先解析转义字符,注意要把字符串包在引号里传给literal_eval parsed_string = ast.literal_eval(f'"{input_str}"') # 转换成单个字符的列表 char_list = list(parsed_string) print(char_list)
运行后就能得到你想要的格式:['\xaa', '\xaa', '\x02', '\xba', '\x04', 'A', ...]
方法二:用编码解码的方式(更简洁)
如果你用的是Python 3.6+,也可以通过编码后再解码的方式处理转义:
input_str = '\\xaa\\xaa\\x02\\xba\\x04A\\xaa\\xaa\\x02\\xbc\\x05>\\xaa\\xaa\\x04\\x80\\x02\\xf8\\x00\\x85\\xaa\\xaa\\x04\\x80\\x02\\xf8' # 先编码成字节,再用unicode-escape解码处理转义 parsed_string = input_str.encode('utf-8').decode('unicode-escape') char_list = list(parsed_string)
这个方法更短,但要注意如果字符串里包含一些特殊的Unicode字符,可能需要调整编码,不过处理普通ASCII转义完全没问题。
为什么手动处理容易失效?
因为转义序列的类型太多了:除了你提到的十六进制转义,还有八进制转义(\123)、普通转义(\n、\\)、Unicode转义(\u00a9)等,手动写逻辑很容易遗漏某一种情况,而内置方法已经帮我们覆盖了所有Python规范里的转义场景。
内容的提问来源于stack exchange,提问作者Adam Noack
相关产品推荐
相关产品推荐

