Python字符串编码错误怎么办_unicode问题排查

1次阅读

python字符串编码错误本质是unicode与字节转换不匹配,需明确编/解码编码;unicodeencodeerror是str→bytes失败,unicodedecodeerror是bytes→str失败;读文件先用chardet探测编码再指定,写文件和http请求优先utf-8,json输出设ensure_ASCII=false,终端乱码需统一环境编码。

Python字符串编码错误怎么办_unicode问题排查

Python字符串编码错误本质是Unicode字符串和字节序列之间转换不匹配,核心在于“该用什么编码解、该用什么编码编”。只要理清数据来源和目标环境,问题基本能定位清楚。

先看报错类型,分清是“编不出”还是“解不开”

两种异常对应两类操作:

  • UnicodeEncodeError:字符串(str)→ 字节(bytes)失败。比如 "中文".encode('ascii') —— ASCII 压根不认中文,直接报错。
  • UnicodeDecodeError:字节(bytes)→ 字符串(str)失败。比如用 open('file.txt').read() 读一个GBK文件,Python 默认按UTF-8去解,字节对不上就崩溃。

读文件时乱码或报错?先查实际编码再指定

别猜,用 chardet 探测:

  • 安装:pip install chardet
  • 检测示例:
    import chardet with open('data.txt', 'rb') as f:     raw = f.read() print(chardet.detect(raw)['encoding'])  # 输出类似 'gbk' 或 'utf-8-sig'

  • 读取时显式传参:with open('data.txt', 'r', encoding='gbk') as f:

写文件或发请求前,统一用UTF-8编码

除非对接老旧系统(如某些windows本地工具),否则优先选UTF-8:

立即学习Python免费学习笔记(深入)”;

  • 写文件:with open('out.txt', 'w', encoding='utf-8') as f:
  • HTTP请求(requests):r = requests.get(url); r.encoding = 'utf-8'; text = r.text
  • JSON输出避免u4f60u597d:json.dumps(data, ensure_ascii=False)

终端/ide显示乱码?不是代码问题,是环境没配对

代码里字符串是对的,但终端用GBK解UTF-8字节,自然成“锟斤拷”:

  • Windows命令行:运行 chcp 65001 切到UTF-8模式
  • VS Code:检查设置中 files.encoding 是否为 utf8
  • Linux/macos:确认 locale 输出含 UTF-8,例如 LANG=en_US.UTF-8

text=ZqhQzanResources