Java : fonction ne récupérant pas les lettres accentuées
Résolu/Fermé
GMHB
Messages postés
8
Date d'inscription
jeudi 23 décembre 2021
Statut
Membre
Dernière intervention
4 janvier 2022
-
Modifié le 24 déc. 2021 à 08:50
KX Messages postés 16754 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 - 25 déc. 2021 à 17:28
KX Messages postés 16754 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 - 25 déc. 2021 à 17:28
A voir également:
- Java : fonction ne récupérant pas les lettres accentuées
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel football - Télécharger - Jeux vidéo
- Java apk - Télécharger - Langages
- Java décompiler - Télécharger - Langages
- Java runtime - Télécharger - Langages
3 réponses
KX
Messages postés
16754
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 020
Modifié le 24 déc. 2021 à 09:32
Modifié le 24 déc. 2021 à 09:32
Bonjour,
Le problème c'est l'encodage.
Tu peux ajouter ces deux petites lignes de code pour tester :
Par exemple, cela me donne ceci sur Eclipse :
Et cela me donne ceci sur la ligne de commande Windows :
Comme tu le vois, l'encodage utilisé est différent (UTF-8 vs windows-1252) ce qui donne une interprétation des caractères lus (la valeur entière) différente, d'où son affichage impossible par la suite.
Mais la gestion de l'encodage est assez complexe à gérer, ce n'est pas un problème de débutant, donc en tant que débutant tu devrais peut-être "ignorer" ce problème et éviter l'usage des accents (ou éviter l'usage de l'invite de commande Windows...)
Le problème c'est l'encodage.
Tu peux ajouter ces deux petites lignes de code pour tester :
System.out.println("Encodage : " + Charset.defaultCharset()); phrase.chars().forEach(c -> System.out.println((char) c + "\t" + (int) c + "\t" + Character.getName(c)));
Par exemple, cela me donne ceci sur Eclipse :
Entrez une phrase :
éloïse
Encodage : UTF-8
é 233 LATIN SMALL LETTER E WITH ACUTE
l 108 LATIN SMALL LETTER L
o 111 LATIN SMALL LETTER O
ï 239 LATIN SMALL LETTER I WITH DIAERESIS
s 115 LATIN SMALL LETTER S
e 101 LATIN SMALL LETTER E
Et cela me donne ceci sur la ligne de commande Windows :
Entrez une phrase :
éloïse
Encodage : windows-1252
? 8218 SINGLE LOW-9 QUOTATION MARK
l 108 LATIN SMALL LETTER L
o 111 LATIN SMALL LETTER O
? 8249 SINGLE LEFT-POINTING ANGLE QUOTATION MARK
s 115 LATIN SMALL LETTER S
e 101 LATIN SMALL LETTER E
Comme tu le vois, l'encodage utilisé est différent (UTF-8 vs windows-1252) ce qui donne une interprétation des caractères lus (la valeur entière) différente, d'où son affichage impossible par la suite.
Mais la gestion de l'encodage est assez complexe à gérer, ce n'est pas un problème de débutant, donc en tant que débutant tu devrais peut-être "ignorer" ce problème et éviter l'usage des accents (ou éviter l'usage de l'invite de commande Windows...)
GMHB
Messages postés
8
Date d'inscription
jeudi 23 décembre 2021
Statut
Membre
Dernière intervention
4 janvier 2022
24 déc. 2021 à 10:37
24 déc. 2021 à 10:37
Je vous remercie pour votre réponse.
J'obtiens une erreur à la compilation sur la ligne :
Peut-être me manque-t-il une déclaration préalable ?
J'obtiens une erreur à la compilation sur la ligne :
System.out.println("Encodage : " + Charset.defaultCharset());
Peut-être me manque-t-il une déclaration préalable ?
KX
Messages postés
16754
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 020
24 déc. 2021 à 15:16
24 déc. 2021 à 15:16
En effet, tu devrais ajouter
import java.nio.charset.Charset;
GMHB
Messages postés
8
Date d'inscription
jeudi 23 décembre 2021
Statut
Membre
Dernière intervention
4 janvier 2022
Modifié le 25 déc. 2021 à 17:22
Modifié le 25 déc. 2021 à 17:22
Effectivement, ça va mieux ! :-)
Merci à vous.
J'ai trouvé une solution sur le web. Je modifie mon code en conséquence.
Si ça peut servir à des débutants comme moi qui aiment bien respecter l'orthographe :
Merci à vous.
J'ai trouvé une solution sur le web. Je modifie mon code en conséquence.
Si ça peut servir à des débutants comme moi qui aiment bien respecter l'orthographe :
import java.util.*; public class string195 { static String phrase, mot; public static void main(String[] argument) { System.out.println("--------------------------------------"); System.out.println("L'objet String et ses m\u00E9thodes : "); System.out.println("--------------------------------------"); System.out.println("Entrez une phrase : "); phrase = System.console().readLine(); System.out.println("Entrez un mot appartenant ou n'appartenant pas \u00E0 cette phrase " + phrase + " : "); mot = System.console().readLine(); analyser(); }// fin de main public static void analyser(){ char guillemet = '"'; System.out.println(""); System.out.print("Votre phrase : "); System.console().printf("%s%n", phrase); System.out.print("Votre mot : "); System.console().printf("%s%n", mot); System.out.println(""); System.out.println("ANALYSE :"); System.out.println(""); if (phrase.endsWith(".")) System.out.println("La phrase se termine par un point."); else System.out.println("La phrase NE se termine PAS par un point."); int position = phrase.indexOf(mot); if (position == -1) System.out.println("Le mot " + guillemet + mot + guillemet + " N'appartient PAS \u00E0 la phrase."); else System.out.println("Le mot " + guillemet + mot + guillemet + " se situe \u00E0 la position " + position + " dans la phrase."); if (phrase.startsWith(mot)) System.out.println("Le mot " + guillemet + mot + guillemet + " se situe au d\u00E9but de la phrase."); else System.out.println("Le mot " + guillemet + mot + guillemet + " NE se situe PAS au d\u00E9but de la phrase."); if (phrase.endsWith(mot) || phrase.endsWith(mot + ".")) System.out.println("Le mot " + guillemet + mot + guillemet + " se situe \u00E0 la fin de la phrase."); else System.out.println("Le mot " + guillemet + mot + guillemet + " NE se situe PAS \u00E0 la fin de la phrase."); char car = phrase.charAt(0); System.out.println("La premi\u00E8re lettre de la phrase est " + guillemet + car + guillemet ); car = mot.charAt(0); System.out.println("La premi\u00E8re lettre du mot " + guillemet + mot + guillemet + " est " + car); String extrait = phrase.substring(0,2); System.out.println("Les deux premi\u00E8res lettres de la phrase sont " + guillemet + extrait + guillemet ); extrait = mot.substring(0,2); System.out.println("Les deux premi\u00E8res lettres du mot " + guillemet + mot + guillemet + " sont " + extrait); } } // fin class
KX
Messages postés
16754
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 020
25 déc. 2021 à 17:28
25 déc. 2021 à 17:28
Tant mieux si tu as pu te débloquer comme cela, toutefois ce n'est pas une solution miracle car System.console() ne fonctionne que si tu démarres le programme depuis une console, ce qui n'est pas le cas par exemple sur Eclipse.
24 déc. 2021 à 16:11
Cette discussion est pour moi, si j'ose, du javanais, mais il n'y a pas moyen (sous réserve que le programme soit destiné à n'être exécuté que dans une version Windows "nationale") d'imposer dans Java comme cela se fait à la ligne de commandes la "bonne" table de caractères?