Character.isISOControl 判断字符是否为 ISO/IEC 6429 定义的 C0(U+0000–U+001F)、C1(U+007F 和 U+0080–U+009F)控制字符,但排除空格、制表符等常见空白字符。

Character.isISOControl 是 Java 中用于判断一个字符是否属于 ISO/IEC 6429 定义的控制字符(即 C0 和 C1 控制码)的静态方法。它返回 true 当且仅当该字符的 Unicode 值落在 ISO 控制字符范围内,且**不是空格、制表符、换行符等常见“可见”空白字符**(这些虽是控制功能,但被明确排除在外)。
ISO 控制字符的范围
该方法检测的是以下两个区间内的字符:
- C0 控制字符:U+0000 到 U+001F(即 0–31 十进制)
- C1 控制字符:U+007F(DEL,127)和 U+0080 到 U+009F(128–159)
注意:U+0020(空格)、U+0009(HT)、U+000A(LF)、U+000D(CR)、U+000B(VT)、U+000C(FF)等虽有控制功能,但不在 isISOControl 的判定范围内——它们被归类为“空白字符”或“格式字符”,需用 Character.isWhitespace() 或 Character.isSpaceChar() 单独判断。
常见误判与注意事项
容易混淆的情况包括:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
立即学习“Java免费学习笔记(深入)”;
-
Character.isISOControl(' ')→ false(制表符是空白字符,非 ISO 控制字符) -
Character.isISOControl('u0000')→ true(NULL 字符) -
Character.isISOControl('u007F')→ true(DEL) -
Character.isISOControl('u0085')→ true(NEL,Next Line,C1 区) -
Character.isISOControl(' ')→ false(空格 U+0020 在 C0 区但被显式排除)
实际使用建议
在处理协议数据、解析二进制文本流、过滤非法控制符(如防止 XML/JSON 注入)时,可结合其他判断提升健壮性:
- 若需过滤所有不可见控制功能字符,应同时检查
isISOControl和isWhitespace - 对字符串批量检测时,避免直接遍历 char(可能出错于代理对),推荐先转为 code point 流:
str.codePoints().allMatch(Character::isISOControl) - 注意:该方法只接受
char或int(code point),传入字符串会编译报错
替代方案参考
如果目标是识别“不可见、无打印意义”的字符,更宽泛的做法是:
Character.isISOControl(c) || Character.isWhitespace(c)- 或使用正则:
c + "" matches "\p{Cc}"(p{Cc}对应 Unicode 类别 “Control”) - Java 12+ 可用
Character.isEmoji(c)等辅助区分现代符号

















