J'ai affaire à un service web externe qui me donne des chaînes de caractères incorrectement codées (et/ou corrompues) ( UTF-8
) qui étaient très probablement soit ISO LATIN
o WINDOWS-1252
mais sont maintenant UTF-8
(et ou un mélange de ISO/Windows/UTF-8). Chapeaux A Lovely ( Â
) abondent.
Je ne peux évidemment pas réparer la façon dont le service web externe stocke ses chaînes de caractères, et l'information est donc perdue. Ainsi, je sais que les espoirs d'une traduction à 100% ne sont pas possibles.
Mais j'espérais que quelqu'un avait écrit une bibliothèque heuristique de mappage de caractères en Java (il est peu probable que quelqu'un tape les chapeaux A).
Sinon, je pense que je peux porter le code PHP de ce type : https://stackoverflow.com/a/3521340/318174
UPDATE et explication : Une simple conversion comme celle à laquelle @VGR a répondu ne fonctionnera pas. Je n'ai pas les octets d'origine. Les données ont été converties de manière incorrecte au niveau du point de terminaison (serveur SOAP peut-être ). getBytes(/*with out correct encoding*/)
a été fait ou peut-être que les données sont stockées dans un format incorrect). Lorsque vous convertissez des octets en chaînes de caractères en Java, les données ne sont pas conservées, sauf si l'encodage est le même partout. C'est facile à comprendre si vous pensez à quelque chose comme ASCII
<-> UTF-8
. Avec Windows-1252
o ISO Latin
c'est beaucoup plus compliqué car les données ne sont pas perdues mais souvent confondues. C'est parce que ces encodages peuvent être de deux octets et ne sont pas un sous-ensemble de UTF-8
.
Si vous ne me croyez pas, vous pouvez essayer de faire getBytes()
dans les deux sens avec des encodages différents et il y aura une corruption et une perte de données.