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

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

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

    有没有比较好的 Java 解决方案,类似 easyexcel 工具,我现在用 common-csv ,谢谢
    gxm44
        1
    gxm44  
       283 天前
    你这里的“读取 CSV 遇到乱码”,是程序里读出来的 csv 是乱码?
    e583409
        2
    e583409  
    OP
       283 天前
    @gxm44 是的 debug 的时候 看到的
    e583409
        3
    e583409  
    OP
       283 天前
    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  
       283 天前 via iPhone
    bom detect 加 utf8 detect 加 gb18030 fallback
    e583409
        5
    e583409  
    OP
       282 天前
    @SoloCompany 谢谢 目前我是这样做的 只是觉得不够优雅 好像也么有其他办法了
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   3390 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 05:12 · PVG 13:12 · LAX 22:12 · JFK 01:12
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.