Bcw*_*mot 2 java unicode codepoint
我正在用Java 10来处理Unicode字符。
我正在使用java.text.BreakIterator包。对于此输出:
myString="ab" hex=0061d835dcde0062
myString.length()=4
myString.codePointCount(0,s.length())=3
BreakIterator output:
a hex=0061
hex=d835dcde
b hex=0062
Run Code Online (Sandbox Code Playgroud)
似乎正确。
使用相同的Java代码,然后输出:
myString="G?íl" hex=0047033200ed006c
myString.length()=4
myString.codePointCount(0,s.length())=4
BreakIterator output:
G? hex=00470332
í hex=00ed
l hex=006c
Run Code Online (Sandbox Code Playgroud)
似乎也正确,除了codePointCount = 4。
为什么不是3,并且有没有使用BreakIterator来获得3值的方法?
我的目标是确定字符串的所有(输出)字符是否都是16位,还是存在替代字符还是组合字符?
“Gíl” 是四个代码点:U + 0047,U + 0332,U + 00ED,U + 006C。
U + 0332是一个组合字符,但它是一个单独的代码点。这与您的第一个示例不同,后者需要使用一个代理对(2个UTF-16代码单元)来表示U + 1D4DE-但后者仍然是单个代码点。
BreakIterator在文本中找到边界- 结合在一起的两个代码点在这种意义上没有边界。从文档中:
字符边界分析使用户可以按照他们期望的方式与字符进行交互,例如,当在文本字符串中移动光标时。字符边界分析提供了在字符串中的正确导航,无论字符如何存储。
因此,我认为这里一切正常。
| 归档时间: |
|
| 查看次数: |
137 次 |
| 最近记录: |