Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中,Unicode字符和JavaUTF-16代码点是如何处理的?_Java_Unicode_Codepoint - Fatal编程技术网

在Java中,Unicode字符和JavaUTF-16代码点是如何处理的?

在Java中,Unicode字符和JavaUTF-16代码点是如何处理的?,java,unicode,codepoint,Java,Unicode,Codepoint,我正在努力使用Java 10中的Unicode字符。 我正在使用java.text.BreakIterator包。 对于此输出: “G̲íl”是四个代码点:U+0047、U+0332、U+00ED、U+006C U+0332是一个组合字符,但它是一个单独的代码点。这与第一个示例不同,它要求使用代理项对(2个UTF-16代码单元)来表示U+1D4DE,但后者仍然是一个单独的代码点 BreakIterator在文本中查找边界-此处组合的两个代码点之间没有这种意义上的边界。从文档中可以看出: 字符边界

我正在努力使用Java 10中的Unicode字符。
我正在使用java.text.BreakIterator包。 对于此输出

“G̲íl”是四个代码点:U+0047、U+0332、U+00ED、U+006C

U+0332是一个组合字符,但它是一个单独的代码点。这与第一个示例不同,它要求使用代理项对(2个UTF-16代码单元)来表示U+1D4DE,但后者仍然是一个单独的代码点

BreakIterator
在文本中查找边界-此处组合的两个代码点之间没有这种意义上的边界。从文档中可以看出:

字符边界分析允许用户按预期与字符进行交互,例如,在文本字符串中移动光标时。字符边界分析可在字符串中提供正确的导航,而不管字符是如何存储的


因此,我认为这里的一切都正常工作。

一个代码点对应一个Unicode字符

Java以UTF-16表示Unicode,即16位单位。代码点值大于U+FFFF的字符由一对“代理字符”表示,如第一个示例所示。因此,3的第一个结果为

在第二种情况下,您有一个不是单个Unicode字符的示例。它是一个字符,字母G,后跟另一个组合字符低端。即每个定义有两个代码点。因此,第二个结果是4

一般来说,Unicode有字符属性表(我不确定这里是否有正确的单词),可以发现其中一个代码点是组合字符


看看Character类。getType(Character)将告诉您代码点是组合字符还是代理字符。

在上一个示例中,G̲在此页面上未正确显示…..它显示为单字符G̲,如定义字符串子句中所示。不知道如何更正此明显的键入错误。它对我来说显示正确。。。