В версии 3.9, opencsv представил еще один синтаксический анализатор, в дополнение к CSVParser. Парсер лежит в основе CSVReader. Этот новый парсер называется RFC4180Parser. Официальная документация гласит
. RFC4180 определяет стандарт для всех самых простых вопросов о том, как именно файлы CSV должны быть отформатированы ...
Основное различие между CSVParser и RFC4180Parser заключается в том, что CSVParser использует escape-символ для обозначения «непечатных» символов, в то время как спецификация RFC4180 принимает все символы между первой и последней кавычками как евангелие (за исключением двойной кавычки). который избегается двойной кавычкой).
blockquote>Так что попробуйте использовать opencsv 3.9+ и RFC4180Parser. Это работает для меня
def parser = new RFC4180ParserBuilder().build() def reader = new CSVReaderBuilder(new FileReader(filename)).withCSVParser(parser).build(); println reader.readNext()
Вывод:
[value1, domain\user, value2]
Если по какой-то причине вы не можете использовать версию 3.9 и выше, вы можете настроить старый синтаксический анализатор так, чтобы экранирующий символ был некоторым другой персонаж вместо обратной косой черты. Но в этом случае существует риск вырвать другие строки из файла, если создатель исходного файла использует обратную косую черту в качестве escape-символа в соответствии с официальной документацией
... Иногда символ-разделитель включается в данные для самого поля, поэтому необходимо использовать кавычки. Эти кавычки также могут быть включены в данные, поэтому необходим экранирующий символ ...
blockquote>Поэтому я предлагаю использовать версию 3.9+ и RFC4180Parser