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

标签 java text character-encoding nio

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

相关文章:

java - 关闭虚拟机

javascript - 将java数据传递到json中,然后从javascript中获取数据

java - 使用链表的队列 - 这应该如何工作?

java - 将 UTC 时间从 MySQL 转换为本地时区

css - 不能超越 CSS 文本样式和图像向下移动吗?

html - 如何在 Sublime Text 中禁用自动完成(2&3)

css - 允许在 Bootstrap 表中选择文本

mysql - 为什么远程服务器mysql命令行无法输入汉字而本地却可以

unicode - 如何使用 Unicode 字符与汉字/汉字组合?

php - 如果字符串是变音符号,fgetcsv 会吃掉字符串的第一个字母