Lecture de caractères non reconnus [Résolu]

Signaler
-
 PCU -
Bonjour,
j'ai un fichier qui contient des caractères spéciaux :
a,à,á,ạ,ã,ả
ă,ằ,ắ,ặ,ẵ,ẳ
...
je les importe avec :

public String[][] lectureAccents (){
String[][] accents;
accents=new String[24][6];


try
{

// Le fichier d'entrée
File file = new File("./parametres/accents.txt");
// Créer l'objet File Reader
FileReader fr = new FileReader(file);
// Créer l'objet BufferedReader
BufferedReader br = new BufferedReader(fr);
StringBuffer sb = new StringBuffer();
String line;
int iLigne=0;
while((line = br.readLine()) != null)
{

System.out.println(line);
String[] parts = line.split(",");
int iChar=0;

while (iChar<=parts.length-1) {
accents[iLigne][iChar]=parts[iChar];
iChar++;
}
iLigne++;
}
fr.close();

}
catch(IOException e)
{
e.printStackTrace();
}




return accents;
}

A final, je récupère :
a,à,á,ạ,ã,ả
ă,ằ,ắ,ặ,ẵ,ẳ
...

Merci d'avance pour votre aide.

3 réponses

Messages postés
16365
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
16 juin 2021
2 846
Bonjour,

Pour vérifier si tes caractères sont bien lus, ou non, tu peux faire du débogage et afficher le nom de chaque caractère pour contrôler s'ils sont corrects.
System.out.println(line); // peut mal s'afficher
for (int i=0; i<line.length(); i++) {
    char c = line.charAt(i);
    System.out.println(Character.getName((int) c));
}


Pour la ligne
a,à,á,ạ,ã,ả
cela devrait afficher :
LATIN SMALL LETTER A
COMMA
LATIN SMALL LETTER A WITH GRAVE
COMMA
LATIN SMALL LETTER A WITH ACUTE
COMMA
LATIN SMALL LETTER A WITH DOT BELOW
COMMA
LATIN SMALL LETTER A WITH TILDE
COMMA
LATIN SMALL LETTER A WITH HOOK ABOVE

Si c'est bien ce que tu obtiens alors cela validera que la lecture est bonne (et que le problème est ailleurs).
Merci pour ta réponse


J'obtiens :
LATIN SMALL LETTER A
COMMA
LATIN CAPITAL LETTER A WITH TILDE
NO-BREAK SPACE
COMMA
LATIN CAPITAL LETTER A WITH TILDE
INVERTED EXCLAMATION MARK
COMMA
LATIN SMALL LETTER A WITH ACUTE
MASCULINE ORDINAL INDICATOR
INVERTED EXCLAMATION MARK
COMMA
LATIN CAPITAL LETTER A WITH TILDE
POUND SIGN
COMMA
LATIN SMALL LETTER A WITH ACUTE
MASCULINE ORDINAL INDICATOR
POUND SIGN


Par ailleurs, si je renseigne la String en dur :
remplace="a,à,á,ạ,ã,ả";
je peux l'afficher sans problème dans le JTextField

Du coup, il semble qu'il y a un problème dès la lecture.
Pascal
Messages postés
16365
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
16 juin 2021
2 846
Tu devrais modifier ta méthode de lecture :
Charset charset = Charset.defaultCharset(); // import java.nio.charset.Charset
List<String> lines = Files.readAllLines(file.toPath()), charset); // import java.nio.file.Files

Avec le charset par défaut tu devrais avoir le même problème qu'avant mais tu peux en utiliser d'autres avec
charset = Charset.forName("UTF-8");
en précisant en paramètre l'encodage du fichier à lire (selon la manière dont il a été enregistré).

Si tu ne sais pas quel encodage choisir tu peux tous les essayer via la méthode Charset.availableCharsets() et ne garder que ceux qui ont une première ligne lue égale à celle que tu as écris en dur.
ça marche.
Merci beaucoup !
Bonne journée
Messages postés
16365
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
16 juin 2021
2 846
Bonjour,

Tu n'as montré que le code de lecture, mais comment tu t'en sers pour obtenir ton résultat ?
Si par exemple tu fais un affichage avec ce que tu récupères, il faudrait que ta console supporte ces caractères, ce qui est rarement le cas.
Au final, j'alimente un JTextField. L'objectif étant de définbir des combinaisons clavier pour écrire ces caractères spéciaux :

remplace=accents[iAccent][jAccent].toString(); // remplace = chaîne de caractères

...

texte =debut+remplace+fin;

...
zoneSaisie.setText(texte); // zoneSaisie étant un JTextField