如何生成';不可映射';Java字符集解码器的输入?
我正在为一个文本解码类编写一组单元测试。我想编写一个测试,正确地处理如何生成';不可映射';Java字符集解码器的输入?,java,text,character-encoding,nio,Java,Text,Character Encoding,Nio,我正在为一个文本解码类编写一组单元测试。我想编写一个测试,正确地处理CharsetDecoder的不可映射输入。然而,我很难启动一个字节缓冲区来实现这一点。例如: CharsetDecoder decoder = Charset.forName("utf-8").newDecoder(); decoder.onUnmappableCharacter(CodingErrorAction.REPORT); ByteBuffer in = ? CharBuffer out = CharBuffer.a
CharsetDecoder
的不可映射输入。然而,我很难启动一个字节缓冲区来实现这一点。例如:
CharsetDecoder decoder = Charset.forName("utf-8").newDecoder();
decoder.onUnmappableCharacter(CodingErrorAction.REPORT);
ByteBuffer in = ?
CharBuffer out = CharBuffer.allocate(256);
CoderResult result = decoder.decode(in, out, true);
assertTrue(result.isUnmappable());
如何启动字节缓冲区(第3行)以传递断言(第6行)?
不起作用的事情:
- 空字符(例如.\u0000编码为utf-8)
- 控制字符(例如,编码为utf-8的\u0001)
- 未定义的字符(例如\u2065编码为utf-8)
- 非字符(例如\ufdd0编码为utf-8)
- 专用字符(例如,编码为utf-8的\ue000)
- 独立组合字符(例如编码为utf-8的\u0305)
public void testUnmappableCharacter() {
CharsetEncoder encoder = Charset.forName("iso-8859-1").newEncoder();
CharBuffer in = CharBuffer.wrap(new char[]{256});
ByteBuffer out = ByteBuffer.allocate(1);
CoderResult result = encoder.encode(in, out, false);
System.out.println(result);
}
对于UTF-8解码,您唯一能够产生的是格式错误的情况,因为所有非法UTF-8码点都无法编码。您正在对JDK CharsetDecoder类进行单元测试?我正在自己的类中使用
CharsetDecoder
类。我只想从CharsetDecoder
生成声明的输出,以测试me类的行为。“不可映射字符条件仅与编码任务相关”-我对此也很好奇。但是如果是这样,为什么要首先添加onUnmappableCharacter
方法呢?对。因此,我假设可能存在一些编码,其中一些字符无法映射到Unicode 4.0。不过,我不认为UTF-8是这样的编码。