Existe-t-il un moyen simple d’éviter les problèmes d’encodage de texte?
Réponses
Trop de publicités?On ne peut pas vraiment éviter de traiter avec le texte de problèmes de codage, mais il y a des solutions existantes,
Lecteur de InputStream: ReaderInputStream
Écrivain à OutputStream: WriterOutputStream
Il vous suffit de sélectionner l'encodage de votre choix
Ainsi, un Lecteur traite avec des personnages et un InputStream traite octets. Le codage précise la façon dont vous souhaitez représenter votre personnage en octets, de sorte que vous ne pouvez pas vraiment ignorer le problème. Pour éviter les problèmes, mon avis est: choisir un jeu de caractères (par exemple, "UTF-8") et rester avec elle.
Quant à la façon de le faire, comme cela a été souligné, "l'évidence de noms de ces classes sont ReaderInputStream et WriterOutputStream." Surprisngly, "elles ne sont pas incluses dans la bibliothèque Java", même si le 'en face de' classes, InputStreamReader et OutputStreamWriter sont inclus.
Donc, beaucoup de gens sont venus avec leurs propres mises en œuvre, y compris Apache Commons IO. En fonction des questions de licences, vous serez probablement en mesure d'inclure les commons-io bibliothèque dans votre projet, ou même de copier une partie du code source (qui est téléchargeable ici).
- Apache ReaderInputStream: API / code source de lien direct
- Apache WriterOutputStream: API / code source de lien direct
Comme vous pouvez le voir, les deux classes de la documentation indique que "tous les charset encodages supportés par les JRE sont manipulés correctement".
N. B. Un commentaire sur l'une des autres réponses ici mentionne ce bug. Mais qui affecte l'Apache Ant ReaderInputStream classe (ici), pas l'Apache Commons IO ReaderInputStream classe.
Notez également que si vous commencez avec une chaîne, vous pouvez ignorer la création d'un StringReader et créer un InputStream en une étape en utilisant org.apache.commons.io.IOUtils à partir de Commons IO comme ceci:
InputStream myInputStream = IOUtils.toInputStream(reportContents, "UTF-8");
Bien sûr, vous devez encore penser au codage du texte, mais au moins la conversion se fait en une étape.