我不是 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/