【问题标题】:How does Java 16 bit chars support Unicode?Java 16 位字符如何支持 Unicode?
【发布时间】:2009-12-21 17:56:44
【问题描述】:

Java 的 char 是 16 位的,但 Unicode 有更多的字符 - Java 是如何处理的?

【问题讨论】:

    标签: java unicode


    【解决方案1】:

    http://en.wikipedia.org/wiki/UTF-16

    在计算中,UTF-16(16 位 UCS/Unicode 转换格式)是 变长字符编码 对于 Unicode,能够编码 整个 Unicode 曲目。这 编码形式将每个字符映射到 16 位字的序列。人物 被称为代码点和 16 位字称为代码单元。 对于 Basic 中的字符 多语言平面 (BMP) 结果 编码是单个 16 位字。为了 其他位面的角色, 编码将导致一对 16 位字,合称为 代理对。所有可能的代码 从 U+0000 到 U+10FFFF 的点, 除了代理代码点 U+D800–U+DFFF(不是 个字符),唯一地映射为 UTF-16 与代码点无关 当前或未来的字符分配 或使用。

    【讨论】:

    【解决方案2】:

    Java 字符串是 UTF-16(大端),因此 Unicode 代码点可以是一个或两个字符。在这种编码下,Java 可以使用字符 0xD835 0xDD0A(字符串文字 "\uD835\uDD0A")来表示代码点 U+1D50A(MATHEMATICAL FRAKTUR CAPITAL G)。 Character 类提供了与代码点相互转换的方法。

    // Unicode code point to char array
    char[] math_fraktur_cap_g = Character.toChars(0x1D50A);
    

    【讨论】:

    • 为什么我们不使用int 类型math_fraktur_cap_g 来读取非BMP 的代理对?如上所述here
    【解决方案3】:

    Java 对字符串使用 UTF-16 - 基本上意味着字符是可变宽度的。它们中的大多数适合 16 位,但基本多语言窗格之外的那些占用 32 位。与 UTF-8 方案非常相似。

    【讨论】:

      猜你喜欢
      • 2011-10-16
      • 2018-09-30
      • 2022-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-22
      • 2020-08-17
      • 1970-01-01
      相关资源
      最近更新 更多