(为了避免因为过于本地化而关闭,我选择Ꙭ作为例子,但这也适用于许多其他角色)
字符Ꙭ是\ 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
除了#2之外的所有东西对我来说都没有意义。这个字符在BMP中,而不是从\ uD800到\ uDFFF,所以代理不应该有任何复杂性。看来我在这里错过了一些关键概念......
答案 0 :(得分:6)
看起来编辑器使用的字符编码与javac(或等效编译器)使用的字符不同。 javac将默认选择在您的计算机上设置为默认值的编码。使用-encoding
更改javac。
will将出现在拉丁语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来获取源文件,这是有充分理由的。