含\xhh转义的bytes转Unicode的正确方法?实例求助
正确转换双重编码的Bytes对象为Unicode字符串
这个问题的核心是你的bytes对象经历了双重编码,咱们一步步拆解解决:
解决步骤与代码
s = b'{"street":"Grossk\\xc3\\xb6lnstra\\xc3\\x9fe"}' # 分步处理更清晰 # 1. 先解码unicode转义,得到包含utf-8字节对应的字符的字符串 temp_str = s.decode('unicode_escape') # 2. 将字符串按latin-1编码回bytes(latin-1每个字符对应一个字节,不会丢失信息) temp_bytes = temp_str.encode('latin-1') # 3. 用utf-8解码得到最终正确的Unicode字符串 result = temp_bytes.decode('utf-8') print(result) # 输出:{"street": "Grosskölnstraße"}
也可以简化成一行代码:
result = s.decode('unicode_escape').encode('latin-1').decode('utf-8')
为什么之前的方法失效?
- 直接用
s.decode('utf8'):你的bytes里的\\xc3是两个ASCII字符(反斜杠+c3),不是真正的utf-8字节\xc3,所以解码后只会保留转义序列,无法解析出德语变音字符。 - 直接用
s.decode('unicode_escape'):它把\\xc3转换成了Unicode字符Ã(U+00C3),\\xb6转换成¶(U+00B6),跳过了utf-8解码的关键步骤,导致出现乱码。
内容的提问来源于stack exchange,提问作者user1406177
相关产品推荐
相关产品推荐

