#java #excel #csv #encoding #vaadin
#java #excel #csv #кодировка #vaadin
Вопрос:
Я работаю над приложением Java, которое принимает файлы .csv от пользователя, затем считывает и записывает их во временную папку на сервере для выполнения некоторой обработки. Вот часть моего кода ввода-вывода:
br = new BufferedReader(new InputStreamReader(in));
out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file)));
String str;
while ((str = br.readLine()) != null) {
out.write(str);
out.newLine();
}
out.flush();
При отладке здесь и просмотре выходного файла в Excel он выглядит точно так, как я ожидаю. Допустим, пользователь вводит файл csv, где значение первой ячейки равно «Foo» (без специальных символов); все это, похоже, отображается в Excel и отладчике. Но позже я проанализирую выходной файл для этого значения, просто используя value.contains("Foo")
. Это возвращает false только тогда, когда файл csv сохраняется в формате csv UTF-8 в Excel, даже если в соответствии с Excel и значением debugger имеет значение «Foo».
Почему это произошло?
Комментарии:
1.
InputStreamReader
иOutputStreamWriter
лучше всего создавать с явнымStandardCharsets.UTF_8
илиCharset.defaultCharset()
(которое используется по умолчанию).out.write("uFEFF");
перед циклом может помочь распознать UTF-8.
Ответ №1:
проблема может быть в том, что когда вы позже прочитаете файл, вам придется прочитать его в кодировке «UTF-8», например
InputStreamReader isr = new InputStreamReader(fis, StandardCharsets.UTF_8);