小智 93
如果您从String开始,您还可以执行以下操作:
new ByteArrayInputStream(inputString.getBytes("UTF-8"))
Run Code Online (Sandbox Code Playgroud)
Pet*_*ter 44
您无法真正避免处理文本编码问题,但现有解决方案:
Reader到InputStream:ReaderInputStreamWriter到OutputStream:WriterOutputStream您只需要选择您选择的编码.
Pet*_*ord 41
好吧,Reader处理字符,InputStream处理字节.编码指定了您希望如何将字符表示为字节,因此您无法真正忽略该问题.至于避免问题,我的意见是:选择一个字符集(例如"UTF-8")并坚持下去.
关于如何实际执行它,正如已经指出的那样," 这些类的明显名称是ReaderInputStream和WriterOutputStream. "令人惊讶的是," 这些不包含在Java库中 ",即使"相反的"类,InputStreamReader和OutputStreamWriter 是包括在内.
因此,很多人都提出了自己的实现,包括Apache Commons IO.根据许可问题,您可能可以在项目中包含commons-io库,甚至可以复制部分源代码(可在此处下载).
正如您所看到的,这两个类的文档都指出"JRE支持的所有字符集编码都得到了正确处理".
注意这里对其中一个答案的评论提到了这个错误.但这会影响Apache Ant ReaderInputStream类(此处),而不影响 Apache Commons IO ReaderInputStream类.
Phi*_*vey 19
另请注意,如果您从一个String开始,您可以跳过创建一个StringReader,并使用Commons IO中的 org.apache.commons.io.IOUtils一步创建一个InputStream,如下所示:
InputStream myInputStream = IOUtils.toInputStream(reportContents, "UTF-8");
Run Code Online (Sandbox Code Playgroud)
当然,您仍然需要考虑文本编码,但至少转换只需一步即可完成.
使用:
new CharSequenceInputStream(html, StandardCharsets.UTF_8);
Run Code Online (Sandbox Code Playgroud)
这种方式不需要预先转换到String然后byte[]分配更多堆内存,以防报告很大.它会在从StringBuffer直接读取流时立即转换为字节.
它使用来自Apache Commons IO项目的CharSequenceInputStream.
| 归档时间: |
|
| 查看次数: |
145298 次 |
| 最近记录: |