Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何生成';不可映射';Java字符集解码器的输入?_Java_Text_Character Encoding_Nio - Fatal编程技术网

如何生成';不可映射';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)

我认为不可映射字符条件仅与编码任务相关。在此,iso-8859-1未定义256个字符:

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是这样的编码。