У меня есть файл 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; // 'å'