Как понять метод isPlaintext в HttpLoggingInterceptor.class? - PullRequest
0 голосов
/ 26 апреля 2019

Я запутался, как определяется Human Readable Text. Я предполагаю, что поскольку Unicode содержит почти все символы языка, то, пока в нем есть codePoint, он доступен для чтения.

Но в HttpLoggingInterceptor # isPlaintext (buffer) :

static boolean isPlaintext(Buffer buffer) {
        try {
            Buffer prefix = new Buffer();
            long byteCount = buffer.size() < 64 ? buffer.size() : 64;
            buffer.copyTo(prefix, 0, byteCount);
            for (int i = 0; i < 16; i++) {
                if (prefix.exhausted()) {
                    break;
                }
                int codePoint = prefix.readUtf8CodePoint();
                if (Character.isISOControl(codePoint) && !Character.isWhitespace(codePoint)) {
                    return false;
                }
            }
            return true;
        } catch (EOFException e) {
            return false; // Truncated UTF-8 sequence.
        }
    }

Это показывает, что байты не читаются, если они содержат не белые символы управления пробелом.

В чем причина этого? Спасибо.

1 Ответ

0 голосов
/ 26 апреля 2019

AFAI может видеть readUtf8CodePoint возвращает кодовую точку UTF-8 для данного буфера.

Из Википедии

UTF-8 - кодировка символов переменной ширины, способная кодировать все 1 112 064 действительныхкодовые точки в Unicode, использующие от одного до четырех 8-битных байтов.

Таким образом, Unicode не обязательно охватывает только читаемые человеком символы.Таким образом, диапазон UTF-8 имеет также контрольные символы с юникодом \u0000 до \u001F или в диапазоне от \u007F до \u009F, и они не читаются человеком.

Помните, что Юникод является стандартным и UTF-8 - это один из способов кодирования Unicode.

...