Python中遇到令人困扰的编码问题该如何解决?
Py3.6
>>> r’\u4e2d’.encode(‘unicode_escape’)
b’\\u4e2d’
>>> b’\\u4e2d’.decode(‘unicode_escape’)
‘\u4e2d’
>>> b’\u005c\u0075\u0034\u0065\u0032\u0064’.decode(‘unicode_escape’)
‘\u4e2d’
>>> b’\u005c\u0075\u0034\u0065\u0032\u0064’.decode(‘unicode_escape’) == b’\\u4e2d’.decode(‘unicode_escape’)
True
>>> b’\u005c\u0075\u0034\u0065\u0032\u0064’ == b’\\u4e2d’
False
r’\u4e2d’ 的 unicode 编码应该是 b’\u005c\u0075\u0034\u0065\u0032\u0064’这个阿,为什么 encode(‘unicode_escape’)出来的是 b’\\u4e2d’这个?
而且 b’\\u4e2d’和 b’\u005c\u0075\u0034\u0065\u0032\u0064’ 都可以解码出来 r’\u4e2d’,这是为什么?
Python中遇到令人困扰的编码问题该如何解决?
遇到编码问题确实头疼,但核心就两点:统一编码、正确处理转换。
首先,确保你的Python文件本身保存为UTF-8(现代IDE默认都是)。在文件开头加这行声明:
# -*- coding: utf-8 -*-
虽然Python3默认UTF-8,但加上更明确。
读写文件时,永远用encoding参数指定编码:
with open('file.txt', 'r', encoding='utf-8') as f:
content = f.read()
with open('file.txt', 'w', encoding='utf-8') as f:
f.write(content)
处理网络数据或不确定来源的字符串时,先尝试解码:
# 假设收到gbk编码的字节流
byte_data = b'\xc4\xe3\xba\xc3'
try:
text = byte_data.decode('gbk')
except UnicodeDecodeError:
# 尝试其他编码或错误处理
text = byte_data.decode('gbk', errors='ignore') # 忽略错误部分
数据库连接、API调用等地方也都要检查编码设置。记住原则:内部统一用Unicode(Python3的str),只在输入输出时进行编解码。
总结就一句:读写数据时显式指定编码,内部处理用Unicode。
你比较一下这个
r’\u4e2d’.encode(‘raw_unicode_escape’)
然后再看看文档,搞清楚 unicode_escape 的行为是什么

