为什么从0x0000到0xFFFF的某个int不是定义的unicode字符

时间:2015-07-06 09:31:21

标签: java unicode

我从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

1 个答案:

答案 0 :(得分:4)

documentation for isDefined()表示如果字符“已定义”,则其具有条目或位于UnicodeData file的范围内。这标识了已分配到字符的代码点集(并且它可能更好地命名为isAssigned())。正如您所发现的,并非基本多语言平面中的所有代码点都已分配给字符(this map显示某些空白区域的位置)。

但是,即使尚未分配代码点(即isDefined()false),也可能在未来的Unicode版本中分配,并且仍然是有效的代码点。编码/解码和使用未分配的代码点是完全有效的(虽然,这有点奇怪)。