如何将含转义序列的UTF-8字符串按字节字面量方式解析
如何将含转义序列的UTF-8字符串按字节字面量方式解析
我太懂你这个需求了!你想要的是把字符串里的转义序列(比如\x00、\xff)当成原始二进制字节来解析,而不是转换成Unicode字符——就像直接写Python的bytes字面量那样。之前用unicode-escape解码之所以不对,是因为它本来就是用来处理Unicode转义的,会把\xff映射成Unicode码点U+00FF(也就是字符ÿ),完全不是你要的二进制字节效果。
这里有个精准的解决方案,用Python标准库的codecs模块里的escape_decode()函数,它专门负责把带二进制转义的字符串转换成字节,和解析bytes字面量的逻辑一模一样:
import codecs # 假设这是你从文件里读出来的字符串 s = r'abc \x00\x01\xff' # 先把字符串转成UTF-8字节,再用escape_decode解析转义序列 result_bytes, _ = codecs.escape_decode(s.encode('utf-8')) # 验证结果,和bytes字面量完全一致 print(list(result_bytes)) # 输出: [97, 98, 99, 32, 0, 1, 255]
如果是直接从UTF-8编码的文件里读取内容,步骤也很简单:
import codecs with open('your_file.txt', 'r', encoding='utf-8') as f: file_content = f.read() # 解析转义序列得到目标字节 target_bytes, _ = codecs.escape_decode(file_content.encode('utf-8')) print(list(target_bytes))
简单解释下这个函数:escape_decode()会自动识别字符串里的\xXX十六进制转义、\ooo八进制转义,把它们转换成对应的二进制字节值,完全复刻了Python解析b'...'字面量的行为,刚好解决你的问题。
备注:内容来源于stack exchange,提问作者August West
相关产品推荐
相关产品推荐

