使用Java生成的CSV在Excel中阿拉伯文乱码,Notepad++显示正常
解决Excel打开UTF-8 CSV时阿拉伯文乱码问题
问题根源在于Excel对无BOM(字节顺序标记)的UTF-8 CSV文件解析支持不佳。Notepad++可以自动识别无BOM的UTF-8编码,但Excel需要通过BOM来确认文件采用UTF-8编码,否则会用系统默认编码(通常是GBK或其他非UTF-8编码)解析,导致阿拉伯文等非ASCII字符显示乱码。
解决方案:给UTF-8 CSV添加BOM标记
修改代码,在写入内容前先写入UTF-8 BOM,具体有两种实现方式:
方式一:通过FileOutputStream直接写入BOM字节
FileOutputStream fos = new FileOutputStream("C:\\Users\\Desktop\\file456789.csv"); // 写入UTF-8 BOM的三个字节 fos.write(0xEF); fos.write(0xBB); fos.write(0xBF); CSVWriter writer234 = new CSVWriter(new OutputStreamWriter(fos, StandardCharsets.UTF_8)); String[] header = { "Field1", "Field2", "Field3", "Field4", "Field5", "Field6", "Field7", "Field8" }; writer234.writeNext(header); String[] data = { "مرحبا", "Field2", "Field3", "Field4", "Field5", "Field6", "Field7", "Field8" }; writer234.writeNext(data); writer234.close();
方式二:通过Writer写入BOM字符
CSVWriter writer234 = new CSVWriter(new OutputStreamWriter(new FileOutputStream("C:\\Users\\Desktop\\file456789.csv"), StandardCharsets.UTF_8)); // 写入UTF-8 BOM字符 writer234.write("\uFEFF"); String[] header = { "Field1", "Field2", "Field3", "Field4", "Field5", "Field6", "Field7", "Field8" }; writer234.writeNext(header); String[] data = { "مرحبا", "Field2", "Field3", "Field4", "Field5", "Field6", "Field7", "Field8" }; writer234.writeNext(data); writer234.close();
额外注意
原代码中的文件路径"C:\Users\Desktop\file456789.csv"存在语法错误,Java字符串中的反斜杠需要转义为双反斜杠"C:\\Users\\Desktop\\file456789.csv",否则会导致编译失败。
内容的提问来源于stack exchange,提问作者user3586286
相关产品推荐
相关产品推荐

