Vous devez d'abord savoir ce que l'encodage de votre fichier est, par exemple UTF-8 ou UTF-16. Qu'est-ce qui génère ce fichier pour commencer? Après cela, c'est relativement simple - vous devez créer un FileInputStream
enveloppé dans un InputStreamReader
au lieu de simplement FileReader
. (FileReader
utilise toujours l'encodage par défaut pour le système.) Spécifiez l'encodage à utiliser lorsque vous créez le InputStreamReader
, et si vous avez choisi le bon, tout devrait commencer à fonctionner.
Notez que vous n'avez pas besoin d'utiliser OpenCSV pour le vérifier - vous pouvez simplement lire le texte du fichier et l'imprimer. Je ne suis pas sûr que je ferais confiance à System.out
pour pouvoir gérer des caractères non-ASCII - vous voudrez peut-être trouver une autre façon d'examiner les chaînes, telles que l'impression des valeurs individuelles des caractères comme entiers (de préférence en hexadécimal) et puis en les comparant avec le charts at unicode.org. D'autre part, vous pouvez essayer le bon encodage et de voir ce qui se passe pour commencer ...
EDIT: D'accord, donc si vous utilisez 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);
}
(je l'espère, vous avoir un try/finally bloc pour fermer le fichier dans votre code réel.)