解决Python中文乱码问题需根据具体场景选择合适方法,以下是综合权威信息后的解决方案:
一、源码文件编码声明
在Python源码文件开头添加编码声明,推荐使用UTF-8:
# -*- coding: utf-8 -*-
或
# coding=utf-8
确保文件以UTF-8编码保存,避免使用GBK等非兼容编码。
二、控制台输出编码设置
Windows系统默认使用GBK,需强制转换编码:
import sys
sys.stdout.reconfigure(encoding='utf-8')
print("中文")
或
s = "中文"
print(s.encode('utf-8').decode('gbk'))
。
三、字符串编码转换
-
强制解码为Unicode
s = "中文" u = s.decode('utf-8') print(u)
-
编码转换
从其他编码(如GBK)转换为Unicode:
s = "中文".encode('gbk').decode('utf-8') print(s)
或从Unicode转换为其他编码:
s = u"中文" encoded_s = s.encode('gbk') print(encoded_s)
四、处理外部数据编码
-
检测文件编码
使用
chardet
库检测文件编码:import chardet with open('example.txt', 'rb') as f: raw_data = f.read() encoding_info = chardet.detect(raw_data) print(encoding_info)
-
读取网页内容
使用
requests
库时,通过r.text
获取Unicode文本:import requests r = requests.get("http://www.baidu.com") print(r.text)
若需二进制数据,使用
r.content
。
五、JSON文件处理
写入JSON时保留非ASCII字符:
import json
data = {"name": "张三", "age": 25}
with open('data.json', 'w', encoding='utf-8') as f:
json.dump(data, f, ensure_ascii=False)
六、图形界面中文显示
使用matplotlib
时设置中文字体:
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
总结 :优先使用UTF-8编码,结合chardet
检测外部数据编码,控制台输出时注意编码转换。处理JSON文件时设置ensure_ascii=False
,图形界面需指定中文字体。