Mic*_*ael 34 java string unicode codepoint
最近我遇到了Java中的StringPointAt方法.我还发现了一些其他的代码点方法:codePointBefore
,codePointCount
等他们肯定有事情做Unicode的,但我不明白.
现在我想知道何时以及如何使用codePointAt
和类似的方法.
Joa*_*uer 51
简短回答:它为您提供从指定索引开始的Unicode代码点String
.即该位置角色的"unicode number".
更长的答案: Java是在16位(又名a char
)足以容纳任何存在的Unicode字符时创建的(这些部分现在称为基本多语言平面或BMP).之后,Unicode扩展为包含代码点> 2 16的字符.这意味着a char
不再能够容纳所有可能的Unicode代码点.
UTF-16是解决方案:它以16位(即恰好一个char
)存储"旧"Unicode码点,以32位(即两个char
值)存储所有新码点.这两个16位值称为"代理对".现在严格来说,a char
拥有一个"UTF-16代码单元"而不是像过去那样的"Unicode字符".
现在所有的"旧"方法(仅处理char
)只要你没有使用任何"新的"Unicode字符(或者并不真正关心它们)就可以使用,但是如果你关心新的字符也是(或者只需要完整的Unicode支持),那么你需要使用实际支持所有可能的Unicode代码点的"codepoint"版本.
注意:一个众所周知的不在BMP中的unicode字符的例子(即仅在使用代码点变体时才起作用)是Emojis:即使是简单的Grinning Face U + 1F600也不能用单个表示char
.
代码点支持65535以上的字符,即Character.MAX_VALUE.
如果您的文字具有如此高的字符,则必须使用代码点或int
代替char
s.
它不支持UTF-16,它可以使用一个或两个16位字符并将其转换为 int
AFAIK,通常这只是最近添加的补充多语言和补充表意文字字符所必需的,例如非繁体中文.
归档时间: |
|
查看次数: |
19762 次 |
最近记录: |