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

CSV文件导入二维数组后首尾单元格出现额外字符的原因排查

问题原因及解决方案

问题原因

你看到的是**UTF-8 BOM(字节顺序标记)**被错误解析后的结果。你的CSV文件是以带BOM的UTF-8格式保存的,但代码中使用FileReader读取时,默认采用了系统本地编码(而非UTF-8),无法识别UTF-8的BOM头,导致BOM对应的字节序列EF BB BF被当成普通字符解析成了。

解决方案

有两种常用处理方式:

方式一:指定UTF-8编码读取

将FileReader替换为InputStreamReader并明确指定UTF-8编码,读取时会自动处理BOM:

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;

public class open2 {
    public static void main(String[] args) {
        String line = "";
        String splitBy = ",";
        try {
            int i = 0;
            String[][] ss = new String[10000][10000];
            BufferedReader br = new BufferedReader(new InputStreamReader(
                new FileInputStream("C:\\Users\\micha\\Documents\\spreadsheet.csv"),
                StandardCharsets.UTF_8
            ));
            while ((line = br.readLine()) != null) {
                String[] cells = line.split(splitBy);
                for (int j = 0; j < cells.length; j++) {
                    ss[i][j] = cells[j];
                }
                i++;
            }
            System.out.println(ss[0][0]);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

方式二:手动去除BOM字符

如果无法修改读取编码逻辑,可在读取第一行后手动移除开头的BOM标记:

while ((line = br.readLine()) != null) {
    // 检测并移除开头的BOM字符
    if (line.startsWith("\uFEFF")) {
        line = line.substring(1);
    }
    String[] cells = line.split(splitBy);
    for (int j = 0; j < cells.length; j++) {
        ss[i][j] = cells[j];
    }
    i++;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 15:20:43