Python编码转换核心是分清str与bytes、源编码和目标编码,用decode()和encode()经Unicode中转;读写文件需显式指定encoding,不确定时用chardet检测,网络响应优先用content手动解码。

Python中处理数据编码转换,核心是搞清“源编码”和“目标编码”,再用encode()和decode()精准转换,避免乱码或报错。
识别当前字符串的编码
Python 3 中字符串默认是 Unicode(str类型),不直接存编码;真正有编码的是字节序列(bytes)。所以第一步要确认你手上的数据是 str 还是 bytes:
- 如果读文件时报
UnicodeDecodeError,说明文件实际是 GBK/GBK2312/Big5 等编码,但你用 UTF-8 打开 —— 改用对应编码打开即可 - 如果打印出来是
b'\xc4\xe3\xba\xc3'这类,那就是bytes,需用.decode('gbk')转成可读字符串 - 不确定编码时,可用
chardet库检测(安装:pip install chardet):import chardet
print(chardet.detect(b'\xc4\xe3\xba\xc3')) # {'encoding': 'GB2312', ...}
常见文件读写中的编码处理
读写文本文件时,显式指定 encoding 参数最稳妥:
- 读 GBK 编码的 CSV 或 TXT:
open('data.txt', encoding='gbk') - 写 UTF-8 文件(含中文):
open('out.txt', 'w', encoding='utf-8') - 用
pandas读 Excel 一般不用管编码(Excel 自带编码信息),但读 CSV 时记得加encoding='gbk'或encoding='utf-8-sig'(处理带 BOM 的 UTF-8)
手动进行 bytes ↔ str 编码转换
当需要跨编码转换(比如 GBK 字节转 UTF-8 字节),必须经由 Unicode 中转:
家电公司网站源码是一个以米拓为核心进行开发的家电商城网站模板,程序采用metinfo5.3.9 UTF8进行编码,软件包含完整栏目与数据。安装方法:解压上传到空间,访问域名进行安装,安装好后,到后台-安全与效率-数据备份还原,恢复好数据后到设置-基本信息和外观-电脑把网站名称什么的改为自己的即可。默认后台账号:admin 密码:132456注意:如本地测试中127.0.0.1无法正常使用,请换成l
立即学习“Python免费学习笔记(深入)”;
-
gbk_bytes → str:gbk_bytes.decode('gbk') -
str → utf8_bytes:text.encode('utf-8') - 合起来就是:
utf8_bytes = gbk_bytes.decode('gbk').encode('utf-8') - 出错时加
errors参数容错:.decode('gbk', errors='ignore')(跳过非法字节)或errors='replace'(替换成 )
网络请求与 API 返回内容的编码处理
requests 获取网页或 JSON 接口时,响应体默认按 HTTP 头或 HTML meta 推断编码,但常不准:
- 查看
r.encoding是 requests 推测的编码,不一定对 - 更可靠的方式:
r.content.decode('gbk')(先取原始 bytes,再手动解码) - 如果是 JSON 接口返回中文乱码,大概率是服务端用了 GBK 但没声明,试试:
r.content.decode('gbk')后再json.loads()
基本上就这些。关键不是背命令,而是分清“我现在手里是 str 还是 bytes?它本来是什么编码?我想变成什么?”——理清这三点,编码问题就不难解。









