Lecture de caractères non reconnus

Résolu
PCU -  
 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.
A voir également:

3 réponses

KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
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
PCU
 
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 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
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
PCU
 
ça marche.
Merci beaucoup !
Bonne journée
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
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
PCU
 
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