(为了避免因为过于本地化而关闭,我选择Ꙭ作为示例,但这也适用于许多其他角色)
字符Ꙭ是\ uA66C或十进制42604(http://unicodinator.com/#A66C).我在使用Java的Character类时看到了一些我无法理解的非常奇怪的东西.
1) Character.isLetter('?');//won't compile, complains 'unclosed character literal'
2) Character.isLetter("?".charAt(0)); //returns true, which is right
3) Character.isLetter(42604);//returns false
4) Character.isLetter('\uA66C');//returns false
5) "?".codePointAt(0);//returns 205? 205 is Í http://unicodinator.com/#00CD
6) ("?".charAt(0)==(char)42604) //is false
Run Code Online (Sandbox Code Playgroud)
除了#2之外的所有东西对我来说都没有意义.这个字符在BMP中,而不是从\ uD800到\ uDFFF,所以代理不应该有任何复杂性.看来我在这里错过了一些关键概念......
看起来编辑器使用的字符编码与javac(或等效编译器)使用的编码不同.javac将默认选择在您的计算机上设置为默认值的编码.使用-encoding更改javac的.
Ꙭ在UTF-8中将以拉丁语1(或类似)出现为ê¬(0xEA 0x99 0xAD),这对于字符文字无效,因为它是三个字符.
至于3和4,它显然是在相对较新的Unicode 5.1.0(2008年3月)中引入的,可能是您使用的Java版本不支持.显然Java SE 6使用Unicode 4.0; Java SE 7使用Unicode 6.0.0.
大多数人都坚持使用US ASCII来获取源文件,这是有充分理由的.
| 归档时间: |
|
| 查看次数: |
388 次 |
| 最近记录: |