IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants Java Discussion :

JTextPane et alphabets non latins


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Octobre 2006
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 108
    Par défaut JTextPane et alphabets non latins
    Bonjour,

    J'essaye d'afficher un texte comportant des caractères non latins provenant d'une requête sur une page Wikipédia (exemple) mais les caractères malais s'affichent mal : carrés au lieu des caractères.

    Quand je fais un System.err.println(text), les caractères sont OK dans la console d'Eclipse.
    Quand je fais un textPane.setText(text), les caractères sont affichés comme des carrés

    J'ai essayé de faire un textPane.setContentType("text/plain; charset=UTF-8") mais çà ne change rien.

    Comment faire pour afficher correctement les caractères ?

    Merci

  2. #2
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    Il y a deux possibilités :
    • Soit le texte n'est pas lu correctement. Dans ce cas il faut vérifier que la lecture se fasse bien avec le bon encodage.
    • Soit la police de caractère ne sait pas représenter ce caractère. La plupart de nos polices occidentales ne savent pas afficher les caractères orientales.
      Il faut alors utiliser une police supportant ces caractères...


    a++

  3. #3
    Membre confirmé
    Inscrit en
    Octobre 2006
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 108
    Par défaut
    Merci

    J'ai fait un certain nombre de tests supplémentaires :
    • Faire un system.err.println() du texte avec le setText() : Le texte s'affiche correctement dans la console d'Eclipse
    • Mettre un menu contextuel sur le JTextPane qui récupère le texte (qui est un lien HTTP) et ouvre Firefox avec : le lien est bien passé à Firefox (avec les caractères malais)
    • Copier le texte malais (avec les carrés) depuis le JTextPane et le coller dans la barre d'adresse de FireFox : le lien s'affiche bien (avec les caractères malais) et en validant la page s'affiche
    • Copier le texte malais depuis le JTextPane et le coller dans Notepad++ en ayant au préalable encodage UTF-8 : le texte s'affiche bien. Ca marche aussi avec Notepad (on ne peut rien lui préciser), avec Eclipse (fichier en UTF-8 ou aussi dans la boîte de recherche de texte)
    • Copier le texte malais depuis le JTextPane et le coller dans un JTextField : à nouveau les carrés


    Après tous ces tests, j'ai l'impression :
    • Que le texte est correctement lu (vu que je le récupère correctement ensuite)
    • Que les polices sont disponibles sur mon PC et utilisables par tous les softs

    Malgré çà, je n'arrive pas à les afficher correctement dans mon appli

    Je suis perdu

  4. #4
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Ben ca confirme le problème de police : celle utilisée par défaut par ton JTextPane ne gère pas les caractères Malais. Donc il se contente d'afficher un carré.

    Firefox doit surement utiliser une police de caractères plus complète.

    Utilises GraphicsEnvironnement.getAllFonts() pour rechercher toutes les polices afin de trouver celle qui accepte ces caractères (de mémoire avec la méthode canDisplay() de la classe Font).

    a++

  5. #5
    Membre confirmé
    Inscrit en
    Octobre 2006
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 108
    Par défaut
    Ok, merci pour toutes ces infos.

    Parmi toutes les fonts reconnues par Java, il n'y en a que 2 qui acceptent le texte en malais: Arial Unicode MS et Kartika. Et le JTextPane choisit Tahoma. Le problème semble bien être là.

    Est-ce qu'il y a des moyens pour avoir une police adaptée automatiquement ?
    Je pourrais proposer à l'utilisateur de choisir lui-même sa police, mais c'est pas super pratique.

    Merci
    Nico

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 179
    Par défaut
    Citation Envoyé par NicoV Voir le message
    Parmi toutes les fonts reconnues par Java, il n'y en a que 2 qui acceptent le texte en malais: Arial Unicode MS et Kartika. Et le JTextPane choisit Tahoma. Le problème semble bien être là.
    Et encore, ce ne sont pas les polices reconnues par Java, mais celles installés sur ton système d'exploitation. Tahoma est la police utilisée par défaut avec les Look & Feel Windows, mais sur d'autres plate-forme, ce sera autre chose.

    http://java.sun.com/j2se/1.3/docs/guide/intl/addingfonts.html


    Tu peux toujours chercher parmi les Font disponibles, une qui gère les caractères que tu veux et l'affecter à ton JTextPane avec setFont. Ou même carrément construire l'objet Font directement avec son nom si tu es sûr que la police est installée sur le système de l'utilisateur.

    Sinon, je crois que tu as la possibilité d'embarquer la police adéquate dans le jar de ton appli et de la charger dynamiquement.

Discussions similaires

  1. XML-Flash - caractères non-latin
    Par heyax dans le forum Flash
    Réponses: 2
    Dernier message: 26/02/2008, 18h12
  2. exception alphabet non reconnu
    Par matrixspirit dans le forum Bioinformatique
    Réponses: 0
    Dernier message: 24/01/2008, 17h53
  3. Problème de caractères non latin dans un formulaire
    Par Huntress dans le forum Langage
    Réponses: 3
    Dernier message: 31/01/2006, 13h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo