gpt4 book ai didi

java - 如何为 Java CharsetDecoder 生成 'un-mappable' 输入?

转载 作者:行者123 更新时间:2023-11-30 11:50:11 27 4
gpt4 key购买 nike

我正在为文本解码类编写一组单元测试。我想编写一个测试,正确执行将不可映射的 input 处理为 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 行)?


不起作用的东西:

  • NULL 字符(例如\u0000 编码为 utf-8)
  • 控制字符(例如\u0001 编码为 utf-8)
  • 未定义的字符(例如\u2065 编码为 utf-8)
  • 非字符(例如\ufdd0 编码为 utf-8)
  • 私有(private)使用字符(例如\ue000 编码为 utf-8)
  • 独立组合字符(例如\u0305 编码为 utf-8)。

最佳答案

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

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 代码点进行编码。

关于java - 如何为 Java CharsetDecoder 生成 'un-mappable' 输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8108861/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com