UnicodeBlock部分类型注释

private static final Set<Character.UnicodeBlock> UNI_BLK = new HashSet<>();
private static final Set<Character.UnicodeBlock> UNI_BLK_RARE = new HashSet<>();
private static final Set<Character.UnicodeBlock> UNI_BLK_PRIVATE = new HashSet<>();
static {
    // 正常编码
    UNI_BLK.add(Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS);             // 4E00-9FBF CJK 统一表意符号
    UNI_BLK.add(Character.UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS);       // F900-FAFF CJK 兼容象形文字
    UNI_BLK.add(Character.UnicodeBlock.CJK_SYMBOLS_AND_PUNCTUATION);        // 3000-303F CJK 符号和标点
    UNI_BLK.add(Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A); // 3400-4DBF CJK 统一表意符号扩展A
    UNI_BLK.add(Character.UnicodeBlock.GENERAL_PUNCTUATION);                // 2000-206F 常用标点
    UNI_BLK.add(Character.UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS);      // FF00-FFEF 半角及全角
    UNI_BLK.add(Character.UnicodeBlock.BASIC_LATIN);                        // 拉丁字符
    UNI_BLK.add(Character.UnicodeBlock.LATIN_1_SUPPLEMENT);
    UNI_BLK.add(Character.UnicodeBlock.LATIN_EXTENDED_A);
    UNI_BLK.add(Character.UnicodeBlock.LATIN_EXTENDED_B);
    UNI_BLK.add(Character.UnicodeBlock.LATIN_EXTENDED_C);
    UNI_BLK.add(Character.UnicodeBlock.LATIN_EXTENDED_D);
    UNI_BLK.add(Character.UnicodeBlock.HIRAGANA);   // 平假名
    UNI_BLK.add(Character.UnicodeBlock.KATAKANA);   // 片假名
    
    UNI_BLK.add(Character.UnicodeBlock.MATHEMATICAL_OPERATORS); // 数学运算符
    
    // 稀有字符,根据出现次数判断是否乱码
    UNI_BLK_RARE.add(Character.UnicodeBlock.ARABIC_EXTENDED_A); // 阿拉伯语扩展A
    UNI_BLK_RARE.add(Character.UnicodeBlock.ARABIC);        // 阿拉伯语
    UNI_BLK_RARE.add(Character.UnicodeBlock.ARMENIAN);      // 亚美尼亚语
    UNI_BLK_RARE.add(Character.UnicodeBlock.BALINESE);      // 巴厘语
    UNI_BLK_RARE.add(Character.UnicodeBlock.BENGALI);       // 孟加拉语
    UNI_BLK_RARE.add(Character.UnicodeBlock.BUGINESE);      // 布吉尼亚语
    UNI_BLK_RARE.add(Character.UnicodeBlock.BATAK);         // 巴塔克 [保加利亚]
    UNI_BLK_RARE.add(Character.UnicodeBlock.CHEROKEE);      // 切罗基族(北美易洛魁人的一支)语
    UNI_BLK_RARE.add(Character.UnicodeBlock.CYRILLIC);      // 西里尔(Cyril)字母
    UNI_BLK_RARE.add(Character.UnicodeBlock.DEVANAGARI);    // 梵文字母
    UNI_BLK_RARE.add(Character.UnicodeBlock.ETHIOPIC);      // 埃塞俄比亚语
    UNI_BLK_RARE.add(Character.UnicodeBlock.GURMUKHI);      // 果鲁穆奇字母(用于写旁遮普语的字母)果鲁穆奇语
    UNI_BLK_RARE.add(Character.UnicodeBlock.GUJARATI);      // 古吉拉特语
    UNI_BLK_RARE.add(Character.UnicodeBlock.GREEK_EXTENDED);// 希腊语扩展
    UNI_BLK_RARE.add(Character.UnicodeBlock.GEORGIAN);      // 格鲁吉亚语
    UNI_BLK_RARE.add(Character.UnicodeBlock.HANUNOO);       // 哈努诺文
    UNI_BLK_RARE.add(Character.UnicodeBlock.HEBREW);        // 希伯来语
    UNI_BLK_RARE.add(Character.UnicodeBlock.KANNADA);       // <印> 埃纳德语
    UNI_BLK_RARE.add(Character.UnicodeBlock.LAO);           // 老挝语
    UNI_BLK_RARE.add(Character.UnicodeBlock.LIMBU);         // 林布族
    UNI_BLK_RARE.add(Character.UnicodeBlock.MONGOLIAN);     // 蒙古族语
    UNI_BLK_RARE.add(Character.UnicodeBlock.MALAYALAM);     // 印度西南部的马拉拉姆(Dravidian)语的一方言
    UNI_BLK_RARE.add(Character.UnicodeBlock.MYANMAR);       // 缅甸
    UNI_BLK_RARE.add(Character.UnicodeBlock.NEW_TAI_LUE);   // 泰泐族语
    UNI_BLK_RARE.add(Character.UnicodeBlock.RUNIC);         // 古代北欧文字
    UNI_BLK_RARE.add(Character.UnicodeBlock.SYRIAC);        // 古代叙利亚语
    UNI_BLK_RARE.add(Character.UnicodeBlock.SINHALA);       // 僧伽罗语
    UNI_BLK_RARE.add(Character.UnicodeBlock.SUNDANESE);     // 巽他人语
    UNI_BLK_RARE.add(Character.UnicodeBlock.SAMARITAN);     // 撒马利亚语
    UNI_BLK_RARE.add(Character.UnicodeBlock.THAI);          // 泰语
    UNI_BLK_RARE.add(Character.UnicodeBlock.TAMIL);         // 泰米尔语
    UNI_BLK_RARE.add(Character.UnicodeBlock.TAGBANWA);      // 塔格巴努亚文
    UNI_BLK_RARE.add(Character.UnicodeBlock.TELUGU);        // 泰卢固语(印度东部德拉维拉语言)
    UNI_BLK_RARE.add(Character.UnicodeBlock.TIBETAN);       // 藏文
    UNI_BLK_RARE.add(Character.UnicodeBlock.CURRENCY_SYMBOLS);          // 货币符号
    
    UNI_BLK_RARE.add(Character.UnicodeBlock.DINGBATS);      // 装饰符
    UNI_BLK_RARE.add(Character.UnicodeBlock.SPACING_MODIFIER_LETTERS);  // 间距修饰字母
    UNI_BLK_RARE.add(Character.UnicodeBlock.GREEK);         // 希腊语
    UNI_BLK_RARE.add(Character.UnicodeBlock.MISCELLANEOUS_SYMBOLS); // 杂项符号
    UNI_BLK_RARE.add(Character.UnicodeBlock.LETTERLIKE_SYMBOLS);    // 字母状符号
    UNI_BLK_RARE.add(Character.UnicodeBlock.GEOMETRIC_SHAPES);      // 几何图形
    UNI_BLK_RARE.add(Character.UnicodeBlock.NUMBER_FORMS);          // 数字形状(包含了正常的罗马数字)
    UNI_BLK_RARE.add(Character.UnicodeBlock.ALPHABETIC_PRESENTATION_FORMS); // 字母表示形状
    UNI_BLK_RARE.add(Character.UnicodeBlock.ARROWS);        // 2190..21FF; Arrows 箭头符号
    
    // 私有编码、特殊编码区域直接判定为乱码
    UNI_BLK_PRIVATE.add(null);
    UNI_BLK_PRIVATE.add(Character.UnicodeBlock.PRIVATE_USE_AREA);            // E000..F8FF; Private Use Area
    UNI_BLK_PRIVATE.add(Character.UnicodeBlock.SUPPLEMENTARY_PRIVATE_USE_AREA_A);
    UNI_BLK_PRIVATE.add(Character.UnicodeBlock.SUPPLEMENTARY_PRIVATE_USE_AREA_B);
    UNI_BLK_PRIVATE.add(Character.UnicodeBlock.SPECIALS);                    // FFF0..FFFF; Specials
    UNI_BLK_PRIVATE.add(Character.UnicodeBlock.HIGH_SURROGATES);             // D800..DB7F; High Surrogates
    UNI_BLK_PRIVATE.add(Character.UnicodeBlock.LOW_SURROGATES);              // DC00..DFFF; Low Surrogates
    // DB80..DBFF; High Private Use Surrogates
    UNI_BLK_PRIVATE.add(Character.UnicodeBlock.HIGH_PRIVATE_USE_SURROGATES);
}

// 检查字符串中是否有乱码
for(int codePoint : text.codePoints().toArray()) {
    Character.UnicodeBlock uk = Character.UnicodeBlock.of(codePoint);
    if(UNI_BLK_PRIVATE.contains(uk)) {
        System.err.println(text + " -> " + uk);
    }
}
posted @ 2020-09-04 14:29  爱定小闹钟  阅读(154)  评论(0编辑  收藏  举报