2015-08-18 3 views
4

Я использую supercscv для записи csv с кодировкой utf-8. Он создает нормальный файл, но excel не распознает его как utf-8, потому что он немой, excel потерян без маркера bom, поэтому любые специальные символы повреждаются при открытии с помощью excel.написать спецификацию UTF-8 с supercsv

Есть ли способ написать файл как UTF-8 с спецификацией с supercsv? Я не могу найти его.

Благодаря

ответ

6

Как supercsv вероятно оборачивает Writer:

Writer writer = new OutputStreamWriter(out, StandardCharsets.UTF_8); 
writer.write('\uFEFF'); // BOM for UTF-* 
... new BeanWriter(writer, CsvPreference.STANDARD_PREFERENCE); 
+0

Спасибо @JoopEggen, вот что я искал. Вот как это выглядит: 'OutputStreamWriter o = new OutputStreamWriter (out); // BOM o.write ('\ uFEFF'); writer = new CsvBeanWriter (o, CsvPreference.EXCEL_NORTH_EUROPE_PREFERENCE); ' – allaf

+0

@allaf лучше добавить UTF-8 к новому вызову OutputStreamWriter, поскольку в противном случае используется стандартная кодировка платформы - которая не переносима. –

0

В моем опыте MS Excel всегда открывает CSV-файлы по умолчанию в MS Office кодировкой в. В моем случае это всегда была Windows 1252 (Испания), даже в не Windows-машинах (MS Office для OSX). Единственный способ справиться с этим - написать CSV-файлы с этой кодировкой.

byte[] csvFileBytes = dataObject.toCSVString().getBytes(Charset.forName("Windows-1252")); 

MS Excel, кажется, никогда не использует другую кодировку для открытия файлов CSV. Вы можете проверить этот пост: Is it possible to force Excel recognize UTF-8 CSV files automatically?

+0

Это неверно; если спецификация присутствует в файле, то Excel откроет файл с правильной кодировкой. Тем не менее, он не делает UTF-8 по умолчанию. – fge

+0

В этом уверены? MS Excel интерпретирует спецификацию файла? –

+1

Да, я уверен; попробуйте ответить выше, т.е. напишите спецификацию, прежде чем записывать что-нибудь еще в файл. – fge