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

				
时间: 2024-11-13 01:45:46

csv文本编辑引号问题的相关文章

用集算器协助Java读入文本

JAVA提供了最基本的文件处理函数,可以简单无结构的方式读入小文本文件,如果遇到需要结构化.格式多样.要求特殊的文件或内存装不下的大文件,相应的代码就会很复杂,可读性和复用性也很难保障. 使用免费的集算器可以弥补这一不足.集算器封装了丰富的结构化文件读写和计算函数,并提供JDBC接口.JAVA应用程序可以将集算器脚本文件当做数据库存储过程执行,传入参数并用JDBC获得返回结果.详情参考集算器用作Java计算类库的应用结构. 下面说明JAVA读入文本的常见案例,以及集算器对应的解法. 读入指定列 

linux操作系统-给文本添加 ' -单引号,一般转成CSV格式时使用

[[email protected] ~]# cat 1.txt1ms2ms3ms4ms5ms [[email protected] ~]# cat 1.txt | awk '{print $1"\047"}'1ms'2ms'3ms'4ms'5ms' [[email protected] ~]# cat 1.txt | awk '{print $1"\047"}' > 2.txt[[email protected] ~]# cat 2.txt1ms'2ms'3

C#获取CSV文件内容对逗号和引号分隔的处理

我们知道,使用excel工具保存成csv文件时有几个规则: 1.每一行的单元格内容之间用逗号分隔. 2.如果单元格的内容本身有逗号,这个单元格的内容将会用引号包含. 3.如果单元格的内容本身有引号, 引号不在首或尾,这个单元格内容不会被引号包含. 引号在首或尾,这个单元格内容会被引号包含且原来首尾的引号会被转义.

Python 读取csv的某行

站长用Python写了一个可以提取csv任一列的代码,欢迎使用.Github链接 csv是Comma-Separated Values的缩写,是用文本文件形式储存的表格数据,比如如下的表格: 就可以存储为csv文件,文件内容是:No.,Name,Age,Score1,Apple,12,982,Ben,13,973,Celia,14,964,Dave,15,95假设上述csv文件保存为"A.csv",如何用Python像操作Excel一样提取其中的一行,也就是一条记录,利用Python自

Jmeter CSV Data Set Config参数化

在使用Jemeter做压力测试的时候,往往需要参数化用户名,密码以到达到多用户使用不同的用户名密码登录的目的.这个时候我们就可以使用CSV Data Set Config实现参数化登录: 首先通过Test Plan或者Thread Group的Add->Config Element->CSV Data Set Config添加  以下是CSV Data Set Config各个参数的简要说明: FileName:即同目录下csv文件的名称 File Encoding: 默认为ANSI Vari

PHP 和 JS 导入导出csv表格(上)

CSV简介 在开发后台管理系统的时候,几乎无可避免的会遇到需要导入导出Excel表格的需求.csv也是表格的一种,其中文名为"逗号分隔符文件".在Excel中打开如下图左边所示,在记事本打开如下图右边所示: 再看包含特殊字符的表格 与xls或xlsx 表格相类似,CSV文件也是用来表示二维表格.而不同的是: 1.CSV是一种纯文本文件,任何编辑器都能打开并读取它:xls(x)是专用的二进制文件,要用表格软件才能正常打开,否则乱码: 2.CSV的体积很小,比如上面的表格内容,csv只有几

用opencsv文件读写CSV文件

首先明白csv文件长啥样儿: 用excel打开就变成表格了,看不到细节 推荐用其它简单粗暴一点儿的编辑器,比如Notepad++, csv文件内容如下: csv文件默认用逗号分隔各列. 有了基础的了解就进入主题,用Opencsv读写csv文件 读:CSVReader 写:CSVWriter 下面分别来看一下opencsv为我们提供的方法(这里只介绍最常用的几个): 读:CSVReader 构造器中涉及三个参数: reader:就是读取文件的流对象,常用的有BufferedReader,Input

C#对.CSV格式的文件--逗号分隔值 的读写及上传ftp服务器操作方法总结

前言 公司最近开发需要将数据保存到.csv文件(逗号分隔值 )中然后上传到ftp服务器上,供我们系统还有客户系统调用,之前完全没有接触过这个,所以先来看看百度的解释:逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本).纯文本意味着该文件是一个字符序列,不含必须像二进制数字那样被解读的数据.CSV文件由任意数目的记录组成,记录间以某种换行符分隔:每条记录由字段组成,字段间的分隔符是其它字

Excel开发学习笔记:读取xml文件及csv文件

读取xml文件 有好多种读取xml的方式,xmlDOM比较常见,我使用了另外一种,它以数据流的方式打开文件并读取内容 Imports System.Xml  Dim group As New List(Of String)  Using reader As XmlReader = XmlReader.Create(OpenFileDialog2.FileName)      While reader.ReadToFollowing("group")          reader.Mo