98 votes

Comment convertir un lecteur en InputStream et un graveur en OutputStream?

Existe-t-il un moyen simple d’éviter les problèmes d’encodage de texte?

96voto

Ritesh Tendulkar Points 489

Si vous commencez avec une chaîne, vous pouvez également procéder comme suit:

 new ByteArrayInputStream(inputString.getBytes("UTF-8"))
 

50voto

Peter Points 1681

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

47voto

Peter Ford Points 171

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).

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.

19voto

Phil Harvey Points 545

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.

7voto

Bozho Points 273663

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X