Java : fonction ne récupérant pas les lettres accentuées
Résolu
GMHB
Messages postés
8
Date d'inscription
Statut
Membre
Dernière intervention
-
KX Messages postés 16761 Date d'inscription Statut Modérateur Dernière intervention -
KX Messages postés 16761 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour,
J'apprends le langage Java, et étudie les méthodes String.
J'écris le code dans l'éditeur RJ TextEd., dans le format UTF-8.
La compilation se passe bien. A l'exécution effectuée dans la fenêtre "Invite de commande" de Windows 10, les mots accentués entrés par l'utilisateur s'affichent bien. Mais la fonction de traitement des valeurs entrées par l'utilisateur n'affiche plus les accents. Elle remplace les lettres accentuées par des points d'interrogation.
Sauriez-vous me diriger vers la solution de ce problème ? Je vous en remercie.
Voici mon code :
J'apprends le langage Java, et étudie les méthodes String.
J'écris le code dans l'éditeur RJ TextEd., dans le format UTF-8.
La compilation se passe bien. A l'exécution effectuée dans la fenêtre "Invite de commande" de Windows 10, les mots accentués entrés par l'utilisateur s'affichent bien. Mais la fonction de traitement des valeurs entrées par l'utilisateur n'affiche plus les accents. Elle remplace les lettres accentuées par des points d'interrogation.
Sauriez-vous me diriger vers la solution de ce problème ? Je vous en remercie.
Voici mon code :
import java.util.*; public class etudeString { 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("--------------------------------------"); Scanner lectureClavier = new Scanner(System.in); System.out.println("Entrez une phrase : ") ; phrase = lectureClavier.nextLine(); System.out.println("Entrez un mot appartenant ou n'appartenant pas \u00E0 cette phrase " + phrase + " : ") ; mot = lectureClavier.next(); analyser(); }// fin de main public static void analyser() { char guillemet = '"'; System.out.println("Votre phrase : " + phrase); System.out.println("Votre mot : " + 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."); } } // fin class
Configuration: Windows / Firefox 95.0
A voir également:
- Java : fonction ne récupérant pas les lettres accentuées
- Jeux java itel - Télécharger - Jeux vidéo
- Waptrick java football - Télécharger - Jeux vidéo
- Eclipse java - Télécharger - Langages
- Java apk - Télécharger - Langages
- Waptrick java voiture - Télécharger - Jeux vidéo
3 réponses
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...)
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 ?
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
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?