在java中将Unicode代码点(整数)编码为char数组(字节)的函数基本上是这样的:
return new char[] { (char) codePoint };
这只是从整数值到字符的转换。
我想知道这种转换实际上是如何完成的,该转换背后的代码用于将整数值转换为以 UTF-16 编码的字符。我尝试在 java 源代码上寻找它,但没有运气。
在java中将Unicode代码点(整数)编码为char数组(字节)的函数基本上是这样的:
return new char[] { (char) codePoint };
这只是从整数值到字符的转换。
我想知道这种转换实际上是如何完成的,该转换背后的代码用于将整数值转换为以 UTF-16 编码的字符。我尝试在 java 源代码上寻找它,但没有运气。
我不确定你说的是哪个功能。
由于 UTF-16 的定义方式,将有效int
代码点转换为将适用于基本多语言平面中的代码点。char
要转换 U+FFFF 以上的任何内容,您应该使用Character.toChars(int)转换为 UTF-16 代码单元。该算法在RFC 2781中定义。
代码点只是一个映射到字符的数字,没有真正的转换。Unicode 代码点以十六进制指定,因此无论您使用十六进制的 codePoint 都将映射到该字符(或字形)。
由于 achar
被定义为在 Java 中保存 UTF-16 数据,这就是它的全部内容。只有当输入是一个int
(即它可以表示 U+10000 或更大的 Unicode 代码点)时,才需要进行一些计算。所有char
值都已经是 UTF-16。
char
Java 中的所有s 在内部都以 UTF-16 表示。这只是将整数值映射到 that char
。
此外,在 Java 平台中,char 数组已经是 UTF-16。