чтение данных в формате ISO-8859-1 из CSV - PullRequest
0 голосов
/ 27 апреля 2020

У меня есть файл CSV, который мне нужно прочитать и проанализировать. Я использую методы и классы из Apache Commons CSV. Во входном файле используются обычные символы низкого ASCII (0x0 -0x7f). Некоторые из полей включают также разрывы строк. Однако, кроме того, некоторые из полей могут содержать символы 0xe4 и 0xe5, которые необходимо преобразовать в '{' и '}' соответственно. Я посмотрел на входной файл в шестнадцатеричном представлении, поэтому я уверен, что это действительно 0xe4 и 0xe5, а не какой-то Unicode.

FileReader in = new FileReader(INPUT_CSV);
System.out.println(in.getEncoding());
records = CSVFormat.RFC4180.withFirstRecordAsHeader().withDelimiter('|').withQuote('#').parse(in);

Метод getEncoding () говорит, что файл имеет формат UTF-8 закодирован, и я подозреваю, что это где-то не так.

Затем я читаю записи, используя al oop -

for (CSVRecord record : records) {
// some analysis in here
   String toProcess = record.get("TO_PROCESS"); // this is the field which may contain the 0xe4 and 0xe5
   toProcess = StringUtils.replaceChars(toProcess, OPENING_BRACKET,'{');
   toProcess = StringUtils.replaceChars(toProcess, CLOSING_BRACKET,'}');

}

Тем не менее, эта замена не работает, и вывод Строки имеют трехсимвольную последовательность 0xef 0xbf 0xbd вместо скобок, которые я надеялся увидеть.

Можно ли принудительно установить ISO-8859-1 на вход? Или при чтении строк из входного файла?

ps Открывающие и закрывающие скобки определяются как

    static char OPENING_BRACKET = 228; // 'ä'
    static char CLOSING_BRACKET = 229; // 'å'
...