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
相关产品推荐
相关产品推荐

