【问题标题】:How to write 3 bytes unicode literal in Java?如何在 Java 中编写 3 个字节的 unicode 文字?
【发布时间】:2014-08-29 06:35:00
【问题描述】:

我想用 Java 编写 unicode 文字 U+10428。 http://www.marathon-studios.com/unicode/U10428/Deseret_Small_Letter_Long_I

我尝试使用 '\u10428',但它无法编译。

【问题讨论】:

  • "\u" 格式是十六进制,而不是十进制。
  • 我认为这是一个不同的问题。
  • 是的,而且似乎 U+10428 是十六进制的。 @jtahlborn
  • 3-Byte Unicode 对于 U+10000 及以上来说是一个可怕的术语(因为 10000 不是字节)。但是,如果这就是将您带到这里的原因,您可能会找到答案。

标签: java unicode utf-16 utf-32 unicode-literals


【解决方案1】:

因为当人们认为 64K 足以满足所有人的需求时,Java 采用了完整的 unicode(以前从哪里听说过?),他们从 UCS-2 开始,后来升级到 UTF-16。

但他们从不费心为 BMP 之外的 unicode 字符添加转义序列。

因此,您唯一的办法是手动重新编码为 UTF-16 代理对并使用两个 UTF-16 转义符。

您的示例代码点U+10428"\uD801\uDC28"

我使用这个网站进行重新编码:https://rishida.net/tools/conversion/

Quote from the docs:

3.10.5 字符串文字

字符串文字由零个或多个用双引号括起来的字符组成。字符可以由转义序列(第 3.10.6 节)表示 - 一个转义序列用于 U+0000 到 U+FFFF 范围内的字符,两个转义序列用于 U+010000 到范围内字符的 UTF-16 代理代码单元U+10FFFF。

【讨论】:

  • 在 Java 中,它不能。无论如何,请注意“一个字符”:根据上下文(有时不存在或过于模糊),它可以表示字节、代码单元、代码点和字形的任何内容。
猜你喜欢
  • 1970-01-01
  • 2013-05-13
  • 1970-01-01
  • 2016-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-16
  • 2012-09-20
相关资源
最近更新 更多