根据您的经验,到目前为止,哪些Unicode字符,代码点,BMP(基本多语言平面)之外的范围是最常见的?这些是需要UTF-8中的4个字节或UTF-16中的代理项.
我希望答案是在名称中使用的中文和日文字符,但不包括在最广泛的CJK多字节字符集中,但在我最常用的项目上,英文维基词典,我们发现哥特字母是到目前为止更为常见.
UPDATE
我写了几个软件工具来扫描整个维基百科上的非BMP字符,我惊讶地发现,即使在日语维基百科中,哥特字母也是最常见的.在中文维基百科中也是如此,但它也有许多中文字符被使用多达50或70次,包括"",""和"".
所以我知道String#codePointAt(int),但它是由char偏移索引,而不是由代码点偏移索引.
我正在考虑尝试这样的事情:
String#charAt(int)得到char的指数char在高代理范围内
String#codePointAt(int)获取代码点,并将索引增加2char值作为代码点,并将索引递增1但我担心的是
char值或一个值我在这里看到一条评论说所有解决方案charAt都是错误的.我无法完全理解并charAt在互联网上找到一些东西.当我查看源代码时,它只返回char数组中的一个元素.所以我的问题是,如果有任何问题或使用问题charAt?
评论就是这样
严格来说,所有基于charAt的解决方案都是错误的,因为charAt不会给你"字符",而是"代码单位",而且代码单元不是需要多个代码单元的字符和字符.
我的问题来自于这个答案,其中说:
由于'ℤ'(0x2124)在基本多语言平面中,因此它由单个代码单元表示.
如果这是正确的,那为什么是"?".getBytes(StandardCharsets.UTF_8).length == 3和"?".getBytes(StandardCharsets.UTF_16).length == 4?