java - 为什么从 0x0000 到 0xFFFF 的一些 int 不是定义的 unicode 字符

标签 java unicode

我阅读了 Character 的 Java 文档, 那

The set of characters from U+0000 to U+FFFF is sometimes referred to as the Basic Multilingual Plane (BMP)

但是我试了下面的代码,发现还有2492 int is not defined!有什么问题吗?还是我有什么误会?谢谢!

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

最佳答案

documentation for isDefined()表示如果字符具有条目或在 UnicodeData file 的范围内,则该字符“已定义” .这标识了已分配 给字符的一组代码点(将其命名为 isAssigned() 可能更好)。正如您所发现的,Basic Multilingual Plane 中的所有代码点尚未分配给字符(this map 显示了一些空格所在的位置)。

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

关于java - 为什么从 0x0000 到 0xFFFF 的一些 int 不是定义的 unicode 字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31242270/

相关文章:

java - jsp中的表单字段不会更改java变量

java - 如何使用 Jackson API 对序列化和反序列化使用不同的 JSONProperty?

unicode - 任何好的 GB、Big5、Unicode 转换器

javascript - DOM 中的动态 Unicode 生成

Java异常处理循环错误

Java 8 接口(interface)与抽象类

python - 如何确保所有字符串文字在 python 中都是 unicode

windows - 从 R 写入 UTF-8 文件

unicode - 如何在 Flutter 中组合 unicode 字符?

java - JFrame 没有完全关闭