java - 如何理解 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.
}
}
它表明如果字节包含非空白控制字符,则它们是不可读的。
这是什么原因?谢谢。
解决方案
AFAI 可以看到readUtf8CodePoint
返回给定缓冲区的 UTF-8 代码点。
来自维基百科
UTF-8 是一种可变宽度字符编码,能够使用一到四个 8 位字节对 Unicode 中的所有 1,112,064 个有效代码点进行编码。
所以 Unicode 不一定只涵盖人类可读的字符。因此 UTF-8 范围也具有控制字符以及 unicode \u0000
through\u001F
或在范围\u007F
through中\u009F
,这些不是人类可读的。
请记住 Unicode 是标准的,而 UTF-8 是编码 Unicode 的一种方式。
推荐阅读
- java - ksql-server 拒绝启动
- c# - 与 IIS 相比,Kestrel 中的性能较慢
- corda - 未解决的参考:构建 Corda 时绑定
- json - 是否有任何 JSON 过滤器来限制 Spring REST API 中 HTTP 请求中传递的未定义属性
- ios - 带有渐变颜色的 ImageView 的圆角问题
- sql - PostgreSQL 如何处理 1 + n 查询?
- linux - git commit 时出现“文件读取后已更改!!!”
- html - 使用css网格时如何扩展最后一行项目以适合行宽
- image-processing - Krajee Bootstrap 文件输入因大文件而失败
- html - 我在 Chrome 的 FileSystem API 上做错了什么?