opencsv в Java игнорирует обратную косую черту в значении поля - PullRequest
13 голосов
/ 15 мая 2011

Я читаю CSV-файл, используя opencsv.

Я игнорирую первую строку;CSV-файл разделен табуляцией с некоторыми значениями, заключенными в двойные кавычки.

Проблема возникает, когда я читаю значения столбца, который имеет символ '\', это значение удаляется из значения.

reader = new CSVReader(new FileReader(exchFileObj),'\t','"',1);

Например, в исходном файле:

address = 12\91buenosaires   

Становится как:

address = 1291buenosiares

В массиве строк, который генерирует csvreader .Как я могу изменить его, чтобы иметь возможность читать символ '\' также?

Ответы [ 3 ]

22 голосов
/ 19 декабря 2011

У меня была та же проблема, и я не смог найти другого персонажа, который, как я мог гарантировать, не появится в моем файле csv.Однако, согласно сообщению на sourceforge, вы можете использовать явный конструктор с символом '\ 0', чтобы указать, что вам не нужны экранирующие символы.

http://sourceforge.net/tracker/?func=detail&aid=2983890&group_id=148905&atid=773542

CSVParser parser = new CSVParser(CSVParser.DEFAULT_SEPARATOR, CSVParser.DEFAULT_QUOTE_CHARACTER, '\0', CSVParser.DEFAULT_STRICT_QUOTES);

Я провел небольшое беглое тестирование, и, похоже, это работает просто отлично, по крайней мере, обратные слеши, безусловно, справятся.

3 голосов
/ 15 мая 2011

CSVReader также имеет конструктор , с помощью которого вы можете установить escape-символ для использования. Если вы используете это и устанавливаете escape-символ на что-то, что вы не используете, вы получите символ обратной косой черты в вашем вводе.

1 голос
/ 13 апреля 2016

В дополнение к ответу @JMM вы должны использовать созданный CSVParser в конструкторе CSVReader. Единственный доступный конструктор:

public CSVReader(Reader reader, int line, CSVParser csvParser)

Вы можете установить строку в 0, чтобы она ничего не пропускала

...