https://blog.csdn.net/qq_22520587/article/details/62454354
半角(half-width/Hankaku) 与 全角(full-with/Zenkaku)
同一字符的两种unicode编码。主要是因为排版的需要,便于排版,美观等因素。
可以将某一个字符的两种unicode编码分为称为主要unicode编码和次要unicode编码。
比如说:
英文的大小写字母、数字、标点的主要unicode编码位于0x01-0x7F。由于这些字符都是半角的(half-width),所以其对应的全角的(full-width)形式的unicode编码就是次要unicode编码,位于0xFF00-OxFFEF
CJK的标点符号,日语的假名的主要unicode编码都是全角的(full-width),所以其对应的半角(half-width)形式就是次要unicode编码,也位于0xFF00-OxFFEF
次要unicode编码表的具体内容参见:http://www.unicode.org/charts/PDF/UFF00.pdf
在自然语言处理中,为机器处理方便,可以将所有字符都转换到主要unicode编码,也就是不使用0xFF00-OxFFEF区间的编码。
具体的将英文的大小写字母、数字、标点转换到ascii码表区间;CJK都转换到全角(full-width)形式。
注意CJK中有些标点符号跟英文的标点形式是相同,要将这些符号转换到ascii码表区间。
Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS : 4E00-9FBF:CJK 统一表意符号
Character.UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS :F900-FAFF:CJK 兼容象形文字 Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A :3400-4DBF:CJK 统一表意符号扩展 A
CJK的意思是“Chinese,Japanese,Korea”的简写 ,实际上就是指中日韩三国的象形文字的Unicode编码
Character.UnicodeBlock.GENERAL_PUNCTUATION :2000-206F:常用标点 Character.UnicodeBlock.CJK_SYMBOLS_AND_PUNCTUATION :3000-303F:CJK 符号和标点 Character.UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS :FF00-FFEF:半角及全角形式
判断字符中是否包含中文字符时,可以用
Character.UnicodeBlock ub = Character.UnicodeBlock.of(c);
if (ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS
|| ub == Character.UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS
|| ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A
|| ub == Character.UnicodeBlock.GENERAL_PUNCTUATION
|| ub == Character.UnicodeBlock.CJK_SYMBOLS_AND_PUNCTUATION
|| ub == Character.UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS){
return true;
}
return false;
}