java - IOUtils.copy() 中的字符集参数有什么作用?

标签 java

我不是 Java 开发人员,但只需要了解一些 Java 正在做什么。

我有一些代码 IOUtils.copy(InputStream a, Writer b, "ISO-8859-1") 或类似的文字

此方法的文档说“inputEncoding - 用于输入流的编码,null 表示平台默认值”。

据我了解,这只是说 a 应该在 ISO-8859-1 中。它没有进行任何类型的转换?这有什么意义。如果输入流编码为 UTF-8 会发生什么?

最佳答案

As I understand it this is just saying that a is expected to be in ISO-8859-1.

好吧,它期望 a 引用的流中的数据 是以 ISO-8859-1 编码的文本数据。

It is not doing any kind of conversion?

是的。它将从流中读取的二进制数据解释为给定编码的文本,然后将该文本数据写入编写器。 (至少,这就是我假设的方法名称。)

What would happen if the inputstream was encoded as UTF-8?

如果数据实际上是以 UTF-8 编码的文本数据,那么虚假数据将被写入写入器 (b)。每个字节将被转换为一个字符(因为 ISO-8859-1 每个字符一个字节),然后该字符将被写入写入器。如果数据包含一个以多字节编码为 UTF-8 的字符,编写器将收到该单个原始字符的多个字符。

基本上,如果编码错误,数据很容易出现乱码。这就像尝试像播放 MP3 文件一样播放 WAV 文件 - 除非没有安全措施,否则 显然 在这种情况下会损坏...

关于java - IOUtils.copy() 中的字符集参数有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20661075/

相关文章:

java - Spring MVC 拦截器模式

java - 初始化时读取变量

java - DateTimeFormatter 2 位数字小时和分钟(不是手动字符串连接)

java - 如果我的实例是一个数组,我如何设置它的数组类型变量的值

java - 使用 osm 文件或 osm 预下载图 block 的开源 Java map 查看器

java - 行为差异 : Intellij vs Eclipse

java - 在 Eclipse 中生成随机数时崩溃

java - 将数据从php发送到java

java - Skype for Business 核心/插件 Java API

java - 在 Java 中创建一个队列数组