zoukankan      html  css  js  c++  java
  • csv文本编辑引号问题

    今天发现一个csv的一个问题,csv工具类对于引号默认有特殊的处理。我希望写出来的结果是

    1,"1",1

    原来的代码是

    CsvWriter cw=new CsvWriter("test.csv", ',', Charset.forName("GBK"));
    String[] tsr=new String[]{"1",""1"","1"};
    cw.writeRecord(tsr);

    结果是

    1,"""1""",1

    多了2个引号,后面经过查询API(网址:http://javacsv.sourceforge.net/com/csvreader/CsvWriter.html)

    发现了一个方法

    CsvWriter cw=new CsvWriter("test.csv", ',', Charset.forName("GBK"));
    cw.setUseTextQualifier(false); String[] tsr=new String[]{"1",""1"","1"}; cw.writeRecord(tsr);

    结果对了:

    1,"1",1

    手动输出scv的默认配置:

                System.out.println(cw.getForceQualifier());
                System.out.println(cw.getTextQualifier());
                System.out.println(cw.getUseTextQualifier());

    结果:

    false
    "
    true

    (未看源码,以下全是猜测)
    也就是说,csv默认使用引号作为文本限制符,当设置getUseTextQualifier为true的时候,如果文本要输出这个限制符,则这个文本本身会被限制符包围,并且还有一个限制符会作为作为转义符出现

    下面使用程序验证下,我们把限制符改为“#”,然后试一下

    cw.setTextQualifier('#');
    cw.setUseTextQualifier(true);            
    String[] tsr=new String[]{"1","#1","1"};
    cw.writeRecord(tsr);

    结果为:

    1,###1#,1

    注意, "#1"只有前面有限制符,后面没有,但是结果却是  ###1#   ,说明第一个是限制符,第二个是转义,第三个是我们的,第四个是限制符

    接下来,如果我要的结果是:

    "1","1","1"

    那我需要在代码里都加上  " 吗?即

    String[] tsr=new String[]{""1"",""1"",""1""};

    答案是不需要。

    cw.getForceQualifier() 意思是是否强制输出限制符,默认是false,这里设置为true即可全部输出

    下面看代码:

    cw.setForceQualifier(true);
    cw.setTextQualifier('"');
    cw.setUseTextQualifier(false);
    String[] tsr=new String[]{"1",""1","1"};
    cw.writeRecord(tsr);
    

     输出结果是:

    "1","1","1"

    反过来设为默认false看看结果

    cw.setForceQualifier(false);
    cw.setTextQualifier('"');
    cw.setUseTextQualifier(false);
    String[] tsr=new String[]{"1",""1","1"};
    cw.writeRecord(tsr);

    1,"1,1








  • 相关阅读:
    NHibernate4使用Oracle.ManagedDataAccess.dll连接oracle及配置多个数据库连接
    Myeclipse闪退故障
    Log4j快速使用精简版
    Eclipse快捷键 10个最有用的快捷键
    Java compiler level does not match解决方法
    ArcMap常用VBA
    firefox浏览器中silverlight无法输入问题
    C#导入Excel遇到数字字母混合列数据丢失解决
    ArcMap计算PolyLine中点VBA
    Apple Watch 开发详解
  • 原文地址:https://www.cnblogs.com/andong2015/p/5361026.html
Copyright © 2011-2022 走看看