Bonjour,
Je souhaiterais comprendre pourquoi cette ligne de code refuse de fonctionner :
Merci d'avance :)Code:String encodingString = new String(chaine.getBytes(), Charset.forName("UTF-8"));
Version imprimable
Bonjour,
Je souhaiterais comprendre pourquoi cette ligne de code refuse de fonctionner :
Merci d'avance :)Code:String encodingString = new String(chaine.getBytes(), Charset.forName("UTF-8"));
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...
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.
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.
Voilà ce qui m'a permis de résoudre mon problème.Code:String encodingString = new String(chaine.getBytes(), Charset.forName("UTF-8"));
Je le rajoute pour ceux qui seront dans le même cas que moi.
Merci en tout cas pour vos réponses. :DCode:
1
2 byte[] temporaire = chaine.getBytes("ISO-8859-1"); String chaineUtf8 = new String(temporaire , 0, temporaire .length, "UTF-8");
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.)