Properties.load(InputStream)
方法是否报告其输入中的无效字节?
API 规范明确指出 InputStream
必须使用 ISO 8859-1 (Latin-1) 字符编码对文本进行编码。这不允许字节值 0x81-0x9F。因此,如果存在此类字节,它应该抛出一个 IOException
(一个 CharacterCodingException
是理想的)。但是是吗?如果不是,它如何处理这些无效字节?
最佳答案
尽管规范中有声明,但所提供的实现将这些无效字节视为 Unicode 字符; 0x81-0x9F 范围内的字节将被解释为 C1 控制字符。 source code有这个:
//The line below is equivalent to calling a
//ISO8859-1 decoder.
c = (char) (0xff & inByteBuf[inOff++]);
不管评论怎么说,这不等同于调用 ISO8859-1 解码器。
编辑
实际上,它相当于调用一个 ISO-8859-1(注意连字符)解码器。所以有两种可能的解释:
- 提供的实现有问题。
- 规范 (API) 文档没有正确描述作者的意图;它应该说流使用 ISO-8859-1 编码。
关于java - Properties.load() 是否报告无效字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15680559/