Opencsv в java игнорирует обратную косую черту в значении поля
Я читаю CSV файл, используя opencsv.
Я игнорирую первую строку; CSV файл разделен табуляцией с некоторыми значениями, заключенными в двойные кавычки.
Проблема возникает, когда я читаю значения столбца, который имеет символ '\', это удаляется из значения.
reader = new CSVReader(new FileReader(exchFileObj),'\t','"',1);
Например в оригинальном файле:
address = 12\91buenosaires
Это становится как:
address = 1291buenosiares
В массиве строк, который генерирует csvreader. Как я могу изменить его, чтобы иметь возможность читать символ '\' также?
Ответы
Ответ 1
CSVReader также имеет конструктор через который вы можете установить управляющий символ для использования. Если вы используете это и задаете escape-символ для чего-то, что вы не используете, вы получите символ обратной косой черты на вашем входе.
Ответ 2
У меня была такая же проблема, и я не мог найти другого персонажа, которого я мог бы гарантировать, не появлялся бы в моем файле csv. Однако, согласно сообщению на sourceforge, вы можете использовать явный конструктор с '\ 0', чтобы указать, что вам не нужен какой-либо escape-символ.
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
В дополнение к ответу @JMM, вы должны использовать этот созданный CSVParser в конструкторе CSVReader. Единственный доступный конструктор:
public CSVReader(Reader reader, int line, CSVParser csvParser)
Вы можете установить строку в 0, чтобы она ничего не пропустила
Ответ 4
@JMM Я опробовал ваше решение и оно работает нормально для обратной косой черты, но теперь его не удается найти в кавычках, ошибка ниже.
java.io.IOException: Un-terminated quoted field at end of CSV line
Старое состояние
вход: abc\xyz\"234 выход: abcxyz" 234
Новое состояние
вход: abc\xyz\234
вывод: abc\xyz\234 (работает как положено)
вход: abc\xyz\"234 (не удалось для этого ввода)
Ошибка: java.io.IOException: Un-terminated quoted field at end of CSV line
: java.io.IOException: Un-terminated quoted field at end of CSV line
new CSVParser(separator, CSVParser.DEFAULT_QUOTE_CHARACTER, '\0', CSVParser.DEFAULT_STRICT_QUOTES);