Lecture de caractères non reconnus

Résolu/Fermé
PCU - 21 mai 2021 à 14:47
 PCU - 23 mai 2021 à 21:03
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.
A voir également:

3 réponses

KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
Modifié le 23 mai 2021 à 11:00
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).
1
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
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
23 mai 2021 à 18:45
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.
1
ça marche.
Merci beaucoup !
Bonne journée
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
21 mai 2021 à 18:18
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.
0
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
0