Najpierw musisz wiedzieć, jakiego kodowania pliku jest taki jak UTF-8 lub UTF-16. Na czym polega generowanie tego pliku?
Po tym, jest stosunkowo prosta - musisz utworzyć FileInputStream
zapakowany w InputStreamReader
zamiast tylko FileReader
. (FileReader
zawsze używa domyślnego kodowania dla systemu.) Określ kodowanie, które będzie używane podczas tworzenia InputStreamReader
, a jeśli wybierzesz odpowiednie, wszystko powinno zacząć działać.
Pamiętaj, że nie musisz używać OpenCSV, aby to sprawdzić - możesz po prostu odczytać tekst pliku i wydrukować go. Nie jestem pewien, czy mógłbym zaufać System.out
, aby móc posługiwać się znakami spoza ASCII - możesz chcieć znaleźć inny sposób sprawdzania ciągów znaków, np. Drukować poszczególne wartości znaków jako liczby całkowite (najlepiej w hex) i następnie porównując je z charts at unicode.org. Z drugiej strony, można spróbować odpowiedniego kodowania i zobaczyć, co się dzieje na początek ...
EDIT: Ok, więc jeśli używasz UTF-8
CSVReader reader=new CSVReader(
new InputStreamReader(new FileInputStream("d:\\a.csv"), "UTF-8"),
',', '\'', 1);
String[] line;
while ((line = reader.readNext()) != null) {
StringBuilder stb = new StringBuilder(400);
for (int i = 0; i < line.length; i++) {
stb.append(line[i]);
stb.append(";");
}
System.out.println(stb);
}
(mam nadzieję, że spróbuj/ostatecznie zablokuj, aby zamknąć plik w swoim prawdziwym kodzie.)