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

Python读取含韩文与数字的CSV文件时遇编码及空字节错误求助

解决读取含韩文CSV时的NULL Byte错误

嘿,我来帮你搞定这个读取CSV时遇到的NULL byte问题!你已经解决了Unicode解码的问题,但NULL字节确实是CSV读取时常见的坑,咱们一步步来处理:

原因分析

NULL字节(\0)通常是文件本身包含无效数据,或者编码转换时产生的冗余字符,csv模块默认不处理这种字符,所以会触发报错。

方案1:过滤NULL字节后读取(适合小文件)

先读取整个文件内容,替换掉所有NULL字节,再传给csv.reader处理:

import csv
import codecs

with codecs.open('1.csv', 'rU', 'utf-16') as f:
    # 读取全部内容并移除NULL字节
    cleaned_content = f.read().replace('\0', '')
    # 按行分割后生成csv读取器
    csvreader = csv.reader(cleaned_content.splitlines())
    for row in csvreader:
        print(row)

方案2:逐行过滤NULL字节(适合大文件,内存友好)

如果你的CSV文件很大,用生成器逐行处理更高效,同时直接用Python3的open指定编码更简洁:

import csv

with open('1.csv', 'r', encoding='utf-16') as f:
    # 用生成器逐行过滤NULL字节
    filtered_lines = (line.replace('\0', '') for line in f)
    csvreader = csv.reader(filtered_lines)
    for row in csvreader:
        print(row)

额外建议:确认文件实际编码

有时候你以为是utf-16,但可能是带BOM的utf-16-le/be,或者其他编码。可以用chardet库检测真实编码:

  1. 先安装chardet:pip install chardet
  2. 检测编码:
import chardet

with open('1.csv', 'rb') as f:
    encoding_result = chardet.detect(f.read())
print(f"文件实际编码可能是:{encoding_result['encoding']}")

把检测到的编码替换到代码里,能避免很多编码相关的隐性问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:23:30