当前位置: 首页 > 知识库问答 >
问题:

OpenCSV不转义引号(")

戎俊
2023-03-14

我有一个CSV文件,它将在引号内有分隔符或未关闭的引号,我如何使CSVReader忽略引号和引号内的分隔符。例如:

123|Bhajji|Maga|39|"I said Hey|" I am "5|'10."|"I a do "you"|get that"

这是文件的内容。

下面的程序读取csv文件。

@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();
}

我收到了这样的订单。

[123, Bhajji, Maga, 39, I said Hey| I am "5|'10., I am an idiot do "you|get that]

在你之后报价发生了什么

编辑: 开放电脑依赖 com.开放电脑 3.4

共有3个答案

华良才
2023-03-14

抱歉,但我没有足够的代表添加评论,所以我必须添加一个答案。

对于您最初提出的在you之后引号发生了什么的问题,答案与I之前引号发生了什么是一样的。

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

李云
2023-03-14

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

123|Bhajji|Maga|39|"I said Hey|"" I am ""5|'10."|"I a do ""you""|get that"

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

郎星汉
2023-03-14

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

  /**
     * 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)。

 类似资料:
  • 我正在使用opencsv读取csv文件。有时csv文件中包含单引号或双引号。如何读取它们而不更改csv文件本身中的数据。 现在,如果我用两个单引号替换一个单引号,它工作正常,与双引号相同,用两个替换单个引号,它的工作原理。但我不想碰源文件。 要访问的代码如下: 这样做的结果是跳过下一行(也包含双引号),插入所有奇数行,跳过偶数行 提前谢谢

  • 本文向大家介绍JavaScript 转义引号,包括了JavaScript 转义引号的使用技巧和注意事项,需要的朋友参考一下 示例 如果您的字符串用单引号引起来,则需要用反斜杠转义内部文字引号 \ 双引号也是如此: 如果要在字符串中存储HTML表示形式,则必须特别注意转义引号,因为HTML字符串大量使用了引号,即在属性中: HTML字符串中的引号也可以使用'(或')表示为单引号,而

  • 问题内容: 如果JSON字符串如下,如何转义双引号? 我想对值 TEST中 的次级双引号进行转义。 我已经尝试了以下方法,但是它不起作用。 我想念什么? 问题答案: 它应该是: 首先,我将外部引号更改为单引号,因此它们不会与内部引号冲突。然后,我将反斜杠放在最里面的引号之前,以使其转义。而且我避开了反斜杠,以便按字面意义对待它。 使用JSON函数可以获得相同的结果:

  • 问题内容: 我该如何工作? 将在引起此故障。我从类似的文件运行它,但也无法从命令行运行。我试过使用and 和(unicode ) 我被卡住了 问题答案: 我有同样的问题。最简单的解决方案是,除了用单引号引起来的撇号外,还要使用反斜杠来将其引起来。 对于您的用例,更改为,它应该可以工作。 另一种方法是将POST数据()用双引号引起来,同时用反斜杠转义JSON字符串中所有嵌套的双引号。

  • opencsv一个简单的CSV解析Java包。它封装了CSV格式文件的输出和读入,可以自动处理CSV格式中的特殊字符。

  • 问题内容: 我在Java EE服务器上使用GSON为视图提供一些json。在某个对象中,我有很长的文字,可以包含任何内容(例如“多么的“好”新闻!”)。 我很惊讶,默认情况下,GSON不会转义双引号,因此它不会生成有效的JSON。 有这样做的好方法吗? 问题答案: 也许我不理解您的问题,但是我能够让GSON处理带引号的字符串,而无需进行任何设置或更改。 输出: 也许我不明白您的要求?