Страницы

Поиск по вопросам

понедельник, 25 февраля 2019 г.

Как на Java записать символы валют в CSV файл для корректного импорта в Excel

При импорте получившегося CSV файла в Excel знаки валют, кроме € и $ заменяются на ?. В Notepad++ все отображается нормально.
String data = "$,€,₪,₴,zł,kr,£,..."
String fileName = "C:\\Program Files\\Java\\apache-tomcat-7.0.68\\temp\\testCSV.csv";
String uncode = "UTF-8";
//uncode = "UTF-8", "UTF-16", "UTF-16BE", "UTF-16LE", "Cp866", "Cp1251", "US-ASCII", "ISO-8859-1";
Пробовал разные варианты:
FileWriter out = new FileWriter(fileName); OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream(fileName),uncode); PrintWriter out = new PrintWriter(fileName, uncode)); PrintWriter out = new PrintWriter (new OutputStreamWriter (new FileOutputStream (fileName), uncode)); Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(fileName), uncode));
File f = new File(fileName); FileUtils.writeStringToFile(f, data, uncode); out.append(data); //out.write(data); //out.println(data);
В чем может быть проблема?


Ответ

Я могу ошибаться, но насколько помню, MS Excel не распознает UTF-8 без BOM (Byte Order Mark), т.ч. попробуйте как-то так:
BufferedWriter writer = new BufferedWriter( new OutputStreamWriter(new FileOutputStream("file.txt", true), "utf8")); writer.append('\uFEFF'); writer.append("мама мыла раму");
Проверка
» /usr/bin/printf "\ufeff...
" | file file.txt file.txt: UTF-8 Unicode (with BOM) text, with no line terminators
В то же время, большинству текстовых редакторов BOM не интересен, поэтому в них у вас текст отображается нормально.

Комментариев нет:

Отправить комментарий