Lecture de caractères non reconnus
Résolu/Fermé
A voir également:
- Lecture de caractères non reconnus
- Caractères ascii - Guide
- Confirmation de lecture whatsapp - Guide
- Caractères spéciaux symboles clavier - Guide
- Accusé de lecture gmail - Guide
- Caractères spéciaux - Guide
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
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.
Pour la ligne
Si c'est bien ce que tu obtiens alors cela validera que la lecture est bonne (et que le problème est ailleurs).
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).
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
23 mai 2021 à 18:45
Tu devrais modifier ta méthode de lecture :
Avec le charset par défaut tu devrais avoir le même problème qu'avant mais tu peux en utiliser d'autres avec
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.
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.
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
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.
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
remplace=accents[iAccent][jAccent].toString(); // remplace = chaîne de caractères
...
texte =debut+remplace+fin;
...
zoneSaisie.setText(texte); // zoneSaisie étant un JTextField
23 mai 2021 à 13:52
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