首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenCSV没有转义引号(“)

OpenCSV没有转义引号(“)
EN

Stack Overflow用户
提问于 2015-06-10 13:33:18
回答 4查看 16.2K关注 0票数 3

我有一个CSV文件,其中包含分隔符或未关闭的引号,如何使CSVReader忽略引号中的引号和分隔符。例如:

代码语言:javascript
复制
123|Bhajji|Maga|39|"I said Hey|" I am "5|'10."|"I a do "you"|get that"

这是文件的内容。

下面的程序读取csv文件。

代码语言:javascript
复制
@Test
public void readFromCsv() throws IOException {
    FileInputStream fis = new FileInputStream(
            "/home/netspurt/awesomefile.csv");
    InputStreamReader isr = new InputStreamReader(fis, "UTF-8");
    CSVReader reader = new CSVReader(isr, '|', '\"');

    for (String[] row; (row = reader.readNext()) != null;) {
        System.out.println(Arrays.toString(row));
    }
    reader.close();
    isr.close();
    fis.close();
}

我得到了类似的东西。

代码语言:javascript
复制
[123, Bhajji, Maga, 39, I said Hey| I am "5|'10., I am an idiot do "you|get that]

you之后的引文发生了什么?

编辑: Opencsv依赖项com.opencsv opencsv 3.4

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-06-11 10:10:52

由于CSV格式指定引号(“),如果它在字段中,我们需要在它前面加上另一个引号(”)。所以这解决了我的问题。

代码语言:javascript
复制
123|Bhajji|Maga|39|"I said Hey|"" I am ""5|'10."|"I a do ""you""|get that"

参考文献:https://www.ietf.org/rfc/rfc4180.txt

票数 0
EN

Stack Overflow用户

发布于 2015-06-10 13:52:03

来自com.opencsv:opencsv的源代码:

代码语言:javascript
复制
  /**
     * Constructs CSVReader.
     *
     * @param reader    the reader to an underlying CSV source.
     * @param separator the delimiter to use for separating entries
     * @param quotechar the character to use for quoted elements
     * @param escape    the character to use for escaping a separator or quote
     */

    public CSVReader(Reader reader, char separator,
                     char quotechar, char escape) {
        this(reader, separator, quotechar, escape, DEFAULT_SKIP_LINES, CSVParser.DEFAULT_STRICT_QUOTES);
    }

请参阅http://sourceforge.net/p/opencsv/source/ci/master/tree/src/main/java/com/opencsv/CSVReader.java

有一个带有附加参数转义的构造函数,它允许转义分隔符和引号(根据javadoc)。

票数 3
EN

Stack Overflow用户

发布于 2015-06-12 01:28:56

对不起,我没有足够的代表来添加评论,所以我将不得不添加一个答复。

对于你最初提出的在你之后的报价发生了什么的问题,答案和我之前的报价一样。

对于CSV数据,分隔符前后的引号是字段数据的开始和结束,因此被删除。这就是为什么这两个引号缺失的原因。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30757940

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档