Analyser le fichier CSV contenant un caractère Unicode à l’aide d’OpenCSV

J’essaie d’parsingr un fichier .csv avec OpenCSV dans NetBeans 6.0.1. Mon fichier contient des caractères Unicode. Lorsque je l’écris en sortie, le caractère apparaît sous une autre forme, comme (HJ1′-E /;). Quand j’ouvre ce fichier dans le Bloc-notes, tout semble aller pour le mieux.

Le code que j’ai utilisé:

CSVReader reader=new CSVReader(new FileReader("d:\\a.csv"),',','\'',1); Ssortingng[] line; while((line=reader.readNext())!=null){ SsortingngBuilder stb=new SsortingngBuilder(400); for(int i=0;i<line.length;i++){ stb.append(line[i]); stb.append(";"); } System.out.println( stb); } 

Vous devez d’abord connaître l’encodage de votre fichier, comme 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 dans un InputStreamReader au lieu d’un simple FileReader . ( FileReader utilise toujours le codage par défaut du système.) Spécifiez le codage à utiliser lors de la création de InputStreamReader . Si vous avez sélectionné le bon, tout devrait commencer à fonctionner.

Notez que vous n’avez pas besoin d’utiliser OpenCSV pour vérifier cela – vous pouvez simplement lire le texte du fichier vous-même et l’imprimer. Je ne suis pas sûr que je ferais confiance à System.out pour pouvoir gérer les caractères non-ASCII – vous voudrez peut-être trouver une autre façon d’examiner les chaînes, telles que l’affichage des valeurs individuelles des caractères sous forme d’entiers (de préférence en hexadécimal). ) puis en les comparant avec les graphiques de unicode.org . D’autre part, vous pouvez essayer le bon encodage et voir ce qui se passe au début …

EDIT: OK, donc si vous utilisez UTF-8:

 CSVReader reader=new CSVReader( new InputStreamReader(new FileInputStream("d:\\a.csv"), "UTF-8"), ',', '\'', 1); Ssortingng[] line; while ((line = reader.readNext()) != null) { SsortingngBuilder stb = new SsortingngBuilder(400); for (int i = 0; i < line.length; i++) { stb.append(line[i]); stb.append(";"); } System.out.println(stb); } 

(J'espère que vous avez un bloc try / finally pour fermer le fichier dans votre vrai code.)