V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
e583409
V2EX  ›  程序员

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

  •  
  •   e583409 · 2021-10-28 13:29:45 +08:00 · 1328 次点击
    这是一个创建于 1120 天前的主题,其中的信息可能已经有所发展或是发生改变。
    读取 csv 真有点麻烦
    wps 导出的 csv 和 MS office 导出的 csv (有 2 种格式,一种是 UTF-8 CSV ,带 BOM ,另一种是逗号分隔的 CSV )都有点不兼容

    有没有比较好的 Java 解决方案,类似 easyexcel 工具,我现在用 common-csv ,谢谢
    6 条回复    2023-09-27 17:21:27 +08:00
    gxm44
        1
    gxm44  
       2021-10-28 14:14:14 +08:00
    你这里的“读取 CSV 遇到乱码”,是程序里读出来的 csv 是乱码?
    e583409
        2
    e583409  
    OP
       2021-10-28 14:39:18 +08:00
    @gxm44 是的 debug 的时候 看到的
    e583409
        3
    e583409  
    OP
       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
        4
    SoloCompany  
       2021-10-28 18:17:04 +08:00 via iPhone
    bom detect 加 utf8 detect 加 gb18030 fallback
    e583409
        5
    e583409  
    OP
       2021-10-30 10:54:09 +08:00
    @SoloCompany 谢谢 目前我是这样做的 只是觉得不够优雅 好像也么有其他办法了
    qiancheng
        6
    qiancheng  
       2023-09-27 17:21:27 +08:00
    ```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();
    ```
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1072 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 82ms · UTC 19:02 · PVG 03:02 · LAX 11:02 · JFK 14:02
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.