Python中如何解决编码问题?

我计算机本地有一个 CSV 文件,表头汉字编码格式是 ASCII,我用 spider(pyton 3.6)的 pandas 读取的时候显示 UnicodeDecodeError: ‘utf-8’ codec can’t decode byte 0xc9 in position 3: invalid continuation byte
问一下该怎么解决?
Python中如何解决编码问题?

8 回复

csv 也是文本文件,要么手动处理成 utf-8 编码的再读取,要么用 pandas read_csv 时指定 encoding


核心就一句话:明确指定编码,统一使用UTF-8。

绝大多数编码问题都源于读写文件或处理字符串时,Python不知道(或猜错了)你用的编码。在Python 3里,字符串是Unicode,但和字节打交道时(比如读文件、网络数据),必须转码。

1. 读写文件:用encoding参数 这是最常见的情况。打开文件时,永远显式指定encoding='utf-8'

# 正确做法:写入和读取都指定UTF-8
with open('myfile.txt', 'w', encoding='utf-8') as f:
    f.write('你好,世界!')

with open('myfile.txt', 'r', encoding='utf-8') as f:
    content = f.read()
print(content)  # 正常输出:你好,世界!

如果文件是其他编码(比如GBK),就把utf-8换成gbk

2. 处理网络数据或未知来源的字节 收到字节串(bytes)时,用.decode()转成字符串;发送时用.encode()转回字节串。

# 假设从某处得到一个GBK编码的字节流
byte_data = b'\xc4\xe3\xba\xc3'  # 这是“你好”的GBK字节
try:
    text = byte_data.decode('gbk')  # 解码
    print(text)  # 输出:你好
except UnicodeDecodeError as e:
    print(f"解码失败:{e}")
    # 可以尝试其他编码,如'utf-8', 'latin-1', 或忽略错误
    # text = byte_data.decode('utf-8', errors='ignore')

3. 处理命令行或系统编码 在Windows命令行等环境,系统默认编码可能不是UTF-8。可以设置环境变量PYTHONUTF8=1(Python 3.7+),或在代码开头设置:

import sys
import io
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')

总结:统一用UTF-8,打开文件别忘加encoding参数。

reload(sys)
sys.setdefaultencoding(‘utf8’)

python3 已经没有这个函数了:)

我用比较笨的方法,直接指定编码方式,open,然后 readlines,list 再转化成其他格式。。占个座看看有没有好的方法。

iconv 一条命令的事情,少写点代码(

谢谢 chenstack,搞定!同时也谢谢楼上两位

你说的汉字编码是 GB 吧,ASCII 不支持中文。

回到顶部