Python读取含塞尔维亚拉丁字母的CSV时遇UnicodeDecodeError的解决方法
解决CSV文件塞尔维亚拉丁字母解码错误的方案
核心原因
你遇到的UnicodeDecodeError是因为Python默认使用了系统默认编码(Windows下通常是cp1252这类charmap编码),这类编码无法覆盖塞尔维亚拉丁字母对应的字节。完全不需要手动替换字符,直接指定正确的编码就能解决问题。
具体解决方法
1. 指定UTF-8编码读取
如果CSV文件是用UTF-8编码保存的(现在多数文件采用该编码),在open()函数中直接指定encoding='utf-8'即可:
import csv with open('your_file.csv', 'r', encoding='utf-8') as f: reader = csv.reader(f) for row in reader: # 处理行数据 print(row)
2. 尝试Windows-1250编码
如果UTF-8不生效,塞尔维亚地区常用的windows-1250编码原生支持这些特殊字母,可以试试这个:
import csv with open('your_file.csv', 'r', encoding='windows-1250') as f: reader = csv.reader(f) # 后续数据处理逻辑
3. 无法确定编码时的排查方法
要是不知道文件的具体编码,可以用chardet库检测:
首先安装库:
pip install chardet
然后执行检测代码:
import chardet with open('your_file.csv', 'rb') as f: detection_result = chardet.detect(f.read()) print(detection_result['encoding']) # 输出检测到的编码,比如'utf-8'或'windows-1250'
拿到编码后,替换前面代码中的encoding参数即可。
4. 兜底方案(不推荐)
如果实在无法确定正确编码,又不想中断程序,可以用errors参数控制解码行为:
errors='ignore':直接跳过无法解码的字符errors='replace':用�替换无法解码的字符
import csv with open('your_file.csv', 'r', encoding='utf-8', errors='replace') as f: reader = csv.reader(f) # 后续操作
注意:这个方法会丢失或损坏数据,仅作为临时替代,优先使用前三种方法。
内容的提问来源于stack exchange,提问作者ribicapongo
相关产品推荐
相关产品推荐

