Prima di tutto bisogna sapere che cosa codifica del file è in, come UTF-8 o UTF-16. Cosa sta generando questo file per cominciare?
Dopodiché, è relativamente semplice: è necessario creare uno FileInputStream
in uno InputStreamReader
anziché solo uno FileReader
. (FileReader
utilizza sempre la codifica predefinita per il sistema.) Specifica la codifica da utilizzare quando crei il InputStreamReader
e, se hai scelto quello giusto, tutto dovrebbe iniziare a funzionare.
Nota che non è necessario utilizzare OpenCSV per controllare questo: è sufficiente leggere il testo del file e stampare tutto. Non sono sicuro che mi piacerebbe che lo System.out
fosse in grado di gestire caratteri non ASCII - potresti voler trovare un modo diverso di esaminare le stringhe, ad esempio stampare i singoli valori dei caratteri come numeri interi (preferibilmente in hex) e quindi confrontandoli con lo charts at unicode.org. D'altra parte, si potrebbe provare la codifica a destra e vedere cosa succede per cominciare ...
EDIT: Okay, quindi se si sta utilizzando 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);
}
(io vi auguro prova/finalmente blocca per chiudere il file nel tuo codice reale.)
fonte
2009-11-08 08:08:38