首页 > 解决方案 > 如何理解 HttpLoggingInterceptor.class 中的方法“isPlaintext”?

问题描述

我很困惑如何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.
        }
    }

它表明如果字节包含非空白控制字符,则它们是不可读的。

这是什么原因?谢谢。

标签: javaokhttpokhttp3

解决方案


AFAI 可以看到readUtf8CodePoint返回给定缓冲区的 UTF-8 代码点。

来自维基百科

UTF-8 是一种可变宽度字符编码,能够使用一到四个 8 位字节对 Unicode 中的所有 1,112,064 个有效代码点进行编码。

所以 Unicode 不一定只涵盖人类可读的字符。因此 UTF-8 范围也具有控制字符以及 unicode \u0000through\u001F或在范围\u007Fthrough中\u009F,这些不是人类可读的。

请记住 Unicode 是标准的,而 UTF-8 是编码 Unicode 的一种方式。


推荐阅读