Как я могу генерировать «не отображаемые» входные данные для Java CharsetDecoder? - PullRequest
2 голосов
/ 13 ноября 2011

Я пишу набор модульных тестов для класса декодирования текста. Я хотел бы написать тест, который правильно выполняет обработку не отображаемых значений input to 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)
  • Управляющие символы (например, кодированные как utf-8)
  • Неопределенные символы (например, \ u2065, закодированные как utf-8)
  • Не-символы (например, \ ufdd0, закодированные как utf-8)
  • Персональные символы (например, \ ue000, закодированные как utf-8)
  • Автономное комбинирование символов (например, \ u0305, закодированное как utf-8).

1 Ответ

1 голос
/ 13 ноября 2011

Я думаю, что условие не отображаемый символ относится только к задачам кодирования.Здесь 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 не могут быть закодированы.

...