我从Character的Java文档中读到了
有时会引用从U + 0000到U + FFFF的字符集 作为基本多语言平面(BMP)
但我尝试了以下代码,发现有2492 int未定义!有什么不对的吗?或者我有一些误解?谢谢!
public static void main( String[] args )
{
int count=0;
for(int i = 0x0000; i<0xFFFF;i++)
{
if(!Character.isDefined(i))
{
count++;
}
}
System.out.println(count);
}
输出:
2492
答案 0 :(得分:4)
documentation for isDefined()
表示如果字符“已定义”,则其具有条目或位于UnicodeData file的范围内。这标识了已分配到字符的代码点集(并且它可能更好地命名为isAssigned()
)。正如您所发现的,并非基本多语言平面中的所有代码点都已分配给字符(this map显示某些空白区域的位置)。
但是,即使尚未分配代码点(即isDefined()
为false
),也可能在未来的Unicode版本中分配,并且仍然是有效的代码点。编码/解码和使用未分配的代码点是完全有效的(虽然,这有点奇怪)。