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

Java Discussion :

Encoding UTF-8 java


Sujet :

Java

  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 33
    Points : 24
    Points
    24
    Par défaut Encoding UTF-8 java
    Bonjour,

    Je souhaiterais comprendre pourquoi cette ligne de code refuse de fonctionner :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String encodingString = new String(chaine.getBytes(), Charset.forName("UTF-8"));
    Merci d'avance

  2. #2
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 074
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 074
    Points : 7 978
    Points
    7 978
    Par défaut
    Chez moi ça compile, et le code "fonctionne".

    Si tu donnais plus de détails sur "Refuse de fonctionner", ou sur ce que tu rentres et sorts qui ne te plait pas, on pourrait éventuellement t'aider...
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Boaf, si, quand même, on a bien une idée de pourquoi "ça marche pas."

    En Java une String n'a pas d'encodage (ou pour le dire autrement, l'encodage d'une String ne nous regarde pas, c'est le problème de Java. En tant que programmeur, agir dessus est une erreur.)

    Cette ligne de code, dit essentiellement "tu vois, cette string, eh ben convertis-là en octets en utilisant un encodage. Et puis, ces octets, convertis-les en String en utilisant un encodage."
    Autrement dit :
    - tu commences avec une String et tu finis avec une String
    - la seule chose que tu fais intervenir au milieu, c'est des encodages
    - mais une String ça n'a pas d'encodage.


    Donc, dans le meilleur des cas, si tu as utilisé le même encodage à l'aller et au retour, tu obtiens la même chose qu'au départ et c'est comme si tu n'avais rien fait.
    Une ligne donc purement absurde.

    Dans tous les autres cas, si l'encodage n'est pas le même dans un sens ou dans l'autre (parce que tu ne précises un encodage que dans un sens, dans l'autre sens tu utilises celui par défaut,) le seul effet que ça peut avoir, c'est causer des problèmes.

    Autrement dit cette ligne, par définition, soit n'a pas d'effet, soit crée des erreurs. On peut dire que c'est pour cela qu'elle "ne marche pas." Il ne faut pas l'écrire.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Mouais, ce code est un mauvais code qui a ete utilise a certains endroits pour "corriger" un probleme de lecture vers des String. C'est mal lu au depart donc on essaie de retrouver les octets de depart (via getByte) pour ensuite les lire avec le bon encoding (ici UTF8). Mais ca ne marche que dans certaines combinaisons d'encodage pour des chaines particulieres. Le probleme de depart c'est la mauvaise lecture des donnees et c'est ca qu'il faut corriger. Ce code doit juste disparaitre.

  5. #5
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 33
    Points : 24
    Points
    24
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String encodingString = new String(chaine.getBytes(), Charset.forName("UTF-8"));
    Voilà ce qui m'a permis de résoudre mon problème.
    Je le rajoute pour ceux qui seront dans le même cas que moi.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    byte[] temporaire = chaine.getBytes("ISO-8859-1");
    String chaineUtf8 = new String(temporaire , 0, temporaire .length, "UTF-8");
    Merci en tout cas pour vos réponses.

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Citation Envoyé par informatica1989 Voir le message
    Je le rajoute pour ceux qui seront dans le même cas que moi.
    Le problème étant que personne ne peut savoir s'il est dans le même cas que toi.

    Je n'encourage donc pas à utiliser ces lignes sans réfléchir.
    Peut-être que ça se voit tout de suite qu'elles ne marchent pas, ou peut-être que ça ne se verra que plus tard dans les cas pas testés.

    Il vaut mieux réserver cette rustine aux seuls moment où on sait absolument tout de ce qu'elle fait. (Et où, donc, on ne l'aurait pas écrite comme ça, mais d'une manière plus simple et directe.)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. instruction pour xml Encoder utf-8
    Par totoche dans le forum ASP
    Réponses: 7
    Dernier message: 14/02/2007, 11h03
  2. [SAX] SAXParser et encoding="UTF-8"
    Par mardona dans le forum Format d'échange (XML, JSON...)
    Réponses: 7
    Dernier message: 08/02/2006, 00h07
  3. problème d'encoding UTF-8 via la SDK MSXML
    Par ep31 dans le forum MFC
    Réponses: 6
    Dernier message: 26/01/2006, 09h46
  4. [1.1] Supprimer xml vers=1.0 encod=utf-8
    Par Nip dans le forum ASP.NET
    Réponses: 9
    Dernier message: 24/11/2005, 16h09
  5. Probleme d'encode XML et java
    Par ujoodha dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 25/10/2005, 09h24

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