Я подозреваю, что это Excel
, который читает UTF-8
в кодировке CSV
как ANSI
.Это происходит, когда вы просто открываете CSV
в Excel
без использования мастера импорта текста.Тогда Excel
всегда ожидает ANSI
, если в начале файла нет BOM
.Если вы откроете CSV
с помощью текстового редактора, который поддерживает Unicode
, все будет правильно.
Пример:
import java.io.BufferedWriter;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.Files;
import java.util.Locale;
import java.util.List;
import java.util.ArrayList;
import com.opencsv.CSVWriter;
class DocxToCSV {
public static void main(String[] args) throws Exception {
Locale.setDefault(Locale.FRENCH);
List<String[]> data = new ArrayList<String[]>();
data.add(new String[]{"F1", "F2", "F3", "F4"});
data.add(new String[]{"Être un membre clé", "Être clé", "membre clé"});
data.add(new String[]{"Être", "un", "membre", "clé"});
Path path = Paths.get("test.csv");
BufferedWriter bw = Files.newBufferedWriter(path);
//bw.write(0xFEFF); bw.flush(); // write a BOM to the file
CSVWriter writer = new CSVWriter(bw, ';', '"', '"', "\r\n");
writer.writeAll(data);
writer.flush();
writer.close();
}
}
Теперь, если вы откроете test.csv
с помощьютекстовый редактор, который поддерживает Unicode
, все будет правильно.Но если вы откроете тот же файл, используя Excel
, он будет выглядеть так:
![enter image description here](https://i.stack.imgur.com/IejWG.png)
Теперь мы делаем то же самое, но имеем
bw.write(0xFEFF); bw.flush(); // write a BOM to the file
активный.
Это приводит к Excel
, например, когда test.csv
просто открывается с помощью Excel
:
![enter image description here](https://i.stack.imgur.com/AaIlO.png)
Конечно,лучшим подходом всегда является использование Excel
мастера импорта текста .
См. также Экспорт Javascript в CSV-кодировку utf-8, проблема для той же проблемы.