Python3中如何将含字面量字节的字符串重新解释为字节并解码?
解决方法:无需手动分离,一步转码搞定
你完全不用手动查找分离那些Unicode转义字符,Python有个非常简便的方法处理这种情况:
首先,你的字符串里那些\xe3之类的转义序列,实际上对应的是Unicode中U+00E3这类单字节字符(ASCII和这些转义后的字符都落在Latin-1编码的覆盖范围内)。利用Latin-1编码一对一映射Unicode单字节字符到字节值的特性,我们可以先把字符串转回字节序列,再解码成你需要的UTF-16编码。
具体代码如下:
# 假设你的字符串变量是s s = "The message - \xe3\x83\xa9\xe3\x82\xa4 ... that was the message" # 第一步:用latin-1编码把字符串转成bytes,完美还原原始字节 raw_bytes = s.encode('latin-1') # 第二步:解码成UTF-16(如果实际需要的是UTF-8,把参数换成'utf-8'即可) decoded_text = raw_bytes.decode('utf-16') print(decoded_text)
为什么这个方法有效?
Latin-1(也叫ISO-8859-1)编码的范围正好覆盖了Unicode的U+0000到U+00FF区间,每个Unicode字符都会被直接转换成对应的字节值(比如U+00E3对应字节0xE3)。这就相当于把字符串里的每个字符“还原”成它原本代表的字节,完全不需要手动处理那些转义序列。
只要你的字符串里只有ASCII字符和这类\xXX形式的转义(也就是都在U+0000到U+00FF范围内),这个方法就不会出问题。
内容的提问来源于stack exchange,提问作者Matt
相关产品推荐
相关产品推荐

