本文目录导读:
常见的中文编码问题及解决方案
文件编码声明
在Python文件开头添加编码声明(Python 2需要,Python 3默认UTF-8):
# -*- coding: utf-8 -*-
字符串处理
-
Python 3:默认使用Unicode,直接支持中文:
text = "你好,世界" print(text) # 正常输出
-
Python 2:需使用
u前缀或unicode():text = u"你好,世界" # Unicode字符串 print(text)
文件读写
-
读取文件:指定编码
with open('file.txt', 'r', encoding='utf-8') as f: content = f.read() -
写入文件:指定编码
with open('output.txt', 'w', encoding='utf-8') as f: f.write("中文内容")
网络请求处理
使用requests库时自动处理编码:
import requests
response = requests.get('http://example.com')
response.encoding = 'utf-8' # 手动指定编码
print(response.text)
数据库连接
连接MySQL时指定utf8编码:
import pymysql
conn = pymysql.connect(
host='localhost',
charset='utf8mb4' # 支持emoji等4字节字符
)
典型案例:读取含有中文的CSV文件
import csv
import codecs
# 案例1:正确读取中文CSV
with codecs.open('data.csv', 'r', encoding='utf-8-sig') as f: # utf-8-sig自动处理BOM
reader = csv.reader(f)
for row in reader:
print(row)
# 案例2:处理编码错误(忽略无法解码的字符)
with open('data.csv', 'r', encoding='utf-8', errors='ignore') as f:
content = f.read()
常见坑点
- Windows系统默认编码:
cp1252或gbk,导致文件读写乱码 - BOM头问题:使用
utf-8-sig而非utf-8 - 混淆
str和bytes:Python 3中'中文'是str,b'中文'是bytes - 控制台输出乱码:设置环境变量
PYTHONIOENCODING=utf-8
验证代码是否解决编码问题
您可以检查案例代码是否包含以下要素:
- ✅ 文件开头有
# -*- coding: utf-8 -*-(Python 2需要) - ✅ 使用
encoding='utf-8'参数打开文件 - ✅ 字符串操作使用Unicode(Python 3默认)
- ✅ 网络请求后指定
encoding
如果您能提供具体的案例代码,我可以帮您分析它是否能解决您遇到的中文编码问题。
标签: 不能