You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

处理CSV文件时遭遇UnicodeDecodeError编码错误求助

解决CSV文件编码解码错误问题

问题分析

你遇到的UnicodeDecodeError是因为文件中存在非ASCII字符(字节0xe2),但chardet仅读取前100000字节进行检测,恰好这部分没有包含非ASCII内容,导致误判为ASCII编码。字节0xe2通常是UTF-8编码中多字节字符的起始位(比如智能引号、破折号这类特殊符号),说明文件实际编码大概率是UTF-8,而非ASCII。

解决方案

1. 重新检测文件编码(读取完整文件)

修改chardet检测代码,读取整个文件内容以获得更准确的结果:

import chardet
with open('1out_test.csv', 'rb') as rawdata:
    result = chardet.detect(rawdata.read())  # 读取全部文件内容
print(result)

2. 直接使用UTF-8编码读取(带错误处理)

如果重新检测后确认是UTF-8,或者想兼容非ASCII字符,直接用UTF-8编码读取,同时添加错误处理避免崩溃:

import pandas as pd
import re

WORDS, N = ["aaaa", "tttt"], 1

pattern = (
    rf"((?:\S+ +){{0,{N}}}\S*"
    fr"\b(?:{'|'.join(map(re.escape, WORDS))})\b"
    rf"\S*(?: +\S+){{0,{N}}})"
)

# 使用UTF-8编码读取,无法解码的字符替换为占位符�
df = pd.read_csv("1out_test.csv", encoding='utf-8', errors='replace', low_memory=False)
df['info'] = df["remarks"].str.extract(pattern, flags=re.IGNORECASE, expand=False).fillna("NA")
# 输出时用UTF-8编码保存,避免乱码
df.to_csv("output.csv", index=False, encoding='utf-8')

3. 尝试Windows常用编码(CP1252)

如果文件是在Windows系统中生成的,也可以尝试cp1252编码:

df = pd.read_csv("1out_test.csv", encoding='cp1252', low_memory=False)

关键说明

  • ASCII编码仅支持0-127的字符,无法处理0xe2这类超出范围的字节,所以用ASCII读取必然报错。
  • errors='replace'参数会将无法解码的字符替换为�,避免程序崩溃;如果不需要保留这些字符,也可以用errors='ignore'直接忽略。

内容的提问来源于stack exchange,提问作者Fanatic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 15:52:36