UnicodeBlock 不直接识别语种,而是按文字体系归类字符;中文、日文、韩文共用 CJK 统一汉字区块,但假名、谚文等有独立区块,故区块仅能推断文字类型而非严格语种。

Character.UnicodeBlock 本身不直接“识别语种”,而是按 Unicode 标准将字符归类到文字区块(block),每个区块对应一类书写系统或符号集。中文、日文、韩文共用大量表意字符(CJK),所以它们被统一编入 CJK 相关区块,而非按国家/语种单独划分。因此,用 UnicodeBlock 判断的是“是否属于某类文字体系”,不是严格意义上的“中文 or 日文 or 韩文”。
核心原理:区块 ≠ 语种,但可合理推断
Unicode 设计上以“文字类型”和“历史编码来源”组织区块,例如:
- CJK_UNIFIED_IDEOGRAPHS(U+4E00–U+9FFF):中日韩通用汉字,如“中”“国”“学”“校”——这些字在三国都使用,无法单靠区块判定归属哪国语言
- HIRAGANA(U+3040–U+309F)和KATAKANA(U+30A0–U+30FF):仅用于日语,可较可靠地视为“日文字符”
- HANGUL_SYLLABLES(U+AC00–U+D7AF):现代韩文音节块,基本等价于“韩文字符”
- CJK_SYMBOLS_AND_PUNCTUATION(U+3000–U+303F):《》「」。、?!等,属中文常用标点,但日韩也共用
常见中文相关区块及适用场景
若目标是识别“中文文本中可能出现的字符”,重点覆盖以下区块即可:
- CJK_UNIFIED_IDEOGRAPHS:最核心,覆盖 99% 常用简繁体汉字
- CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A(U+3400–U+4DBF):生僻字、古籍用字,如“㐀”“㐂”
- CJK_COMPATIBILITY_IDEOGRAPHS(U+F900–U+FAFF):旧字形、兼容异体,如“國”(繁体)与“国”(简体)可能分属不同编码
- CJK_SYMBOLS_AND_PUNCTUATION:中文全角标点,《》【】、。!?
- HALFWIDTH_AND_FULLWIDTH_FORMS(U+FF00–U+FFEF):全角英文字母、数字、ASCII 符号,如“A”“1”“,”——常出现在中文排版中,建议按需纳入
注意:CJK_RADICALS_SUPPLEMENT(部首)、CJK_STROKES(笔画)等属于构字部件,不是独立成字的汉字,一般不视为“中文字符”。
避开典型误判:哪些 CJK 区块不算“中文字符”
以下区块虽属 CJK 大类,但不能简单当作中文来处理:
- HIRAGANA / KATAKANA:纯日文假名,如“さ”“カ”,不属于中文
- YI_SYLLABLES(彝文)、BAAMOON(巴穆姆文)等:同属 Unicode 的“表意文字”大类,但与中文无关
- CJK_COMPATIBILITY_FORMS:主要是字体映射兼容项,极少用于实际中文文本
- GENERAL_PUNCTUATION(U+2000–U+206F):含英文破折号、省略号等,如“—”“…”,非中文特有
实操建议:一行代码判断是否为“广义中文字符”
推荐使用 Character.isIdeographic(int) —— 它内部已聚合主流 CJK 表意文字区块(包括基本汉字、扩展 A/B、兼容汉字、部分标点),且自动处理代理对:
- 对单个 char:先转码点再判断
Character.isIdeographic((int) ch) - 对字符串遍历:用
String.codePoints()流式处理更安全 - 若需严格区分“仅汉字(不含标点/假名)”,则必须手动组合
UnicodeBlock判断,并排除 HIRAGANA/KATAKANA/CJK_RADICALS 等

















