读取 CSV 遇到乱码 大家有什么好的解决方案吗?

2021-10-28 13:29:45 +08:00
 e583409
读取 csv 真有点麻烦
wps 导出的 csv 和 MS office 导出的 csv (有 2 种格式,一种是 UTF-8 CSV ,带 BOM ,另一种是逗号分隔的 CSV )都有点不兼容

有没有比较好的 Java 解决方案,类似 easyexcel 工具,我现在用 common-csv ,谢谢
1115 次点击
所在节点    程序员
6 条回复
gxm44
2021-10-28 14:14:14 +08:00
你这里的“读取 CSV 遇到乱码”,是程序里读出来的 csv 是乱码?
e583409
2021-10-28 14:39:18 +08:00
@gxm44 是的 debug 的时候 看到的
e583409
2021-10-28 14:40:05 +08:00
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(new File(filePath))));
CSVParser parser = CSVParser.parse(br, CSVFormat.EXCEL.builder().setHeader().setSkipHeaderRecord(true).build());
List<String> headers = parser.getHeaderNames();
List<CSVRecord> dataList = parser.getRecords();

br = new BufferedReader(new InputStreamReader(new FileInputStream(new File(filePath)), "GBK"));//"UTF-8"
parser = CSVParser.parse(br, CSVFormat.EXCEL.builder().setHeader().setSkipHeaderRecord(true).build());
headers = parser.getHeaderNames();
dataList = parser.getRecords();

br = new BufferedReader(new InputStreamReader(new FileInputStream(new File(filePath)), "UTF-8"));//"UTF-8"
parser = CSVParser.parse(br, CSVFormat.EXCEL.builder().setHeader().setSkipHeaderRecord(true).build());
headers = parser.getHeaderNames();
dataList = parser.getRecords();
SoloCompany
2021-10-28 18:17:04 +08:00
bom detect 加 utf8 detect 加 gb18030 fallback
e583409
2021-10-30 10:54:09 +08:00
@SoloCompany 谢谢 目前我是这样做的 只是觉得不够优雅 好像也么有其他办法了
qiancheng
214 天前
```python
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(new File(filePath))));
CSVParser parser = CSVParser.parse(br, CSVFormat.EXCEL.builder().setHeader().setSkipHeaderRecord(true).build());
List<String> headers = parser.getHeaderNames();
List<CSVRecord> dataList = parser.getRecords();

br = new BufferedReader(new InputStreamReader(new FileInputStream(new File(filePath)), "GBK"));//"UTF-8"
parser = CSVParser.parse(br, CSVFormat.EXCEL.builder().setHeader().setSkipHeaderRecord(true).build());
headers = parser.getHeaderNames();
dataList = parser.getRecords();

br = new BufferedReader(new InputStreamReader(new FileInputStream(new File(filePath)), "UTF-8"));//"UTF-8"
parser = CSVParser.parse(br, CSVFormat.EXCEL.builder().setHeader().setSkipHeaderRecord(true).build());
headers = parser.getHeaderNames();
dataList = parser.getRecords();
```

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/811229

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX