(以免因过于局限而关闭,我以Ꙭ为例,但这在许多其他字符上也是如此)

字符Ꙭ是\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之间,因此代理不应该有任何复杂性。似乎我在这里错过了一些关键概念...

最佳答案

看来您的编辑器使用的字符编码与javac(或等效编译器)使用的字符不同。 javac将默认选择在您的计算机上碰巧将其设置为默认的任何编码。使用-encoding更改javac。

UTF-8中的will在拉丁文1中(或类似名称)显示为ê¬(0xEA 0x99 0xAD),这对于字 rune 字无效,因为它是三个字符。

至于3和4,它显然是在相对较新的Unicode 5.1.0(2008年3月)中引入的,可能是所使用的Java版本不支持该编码。显然,Java SE 6使用Unicode 4.0。 Java SE 7使用Unicode 6.0.0。

大多数人都有充分的理由坚持使用US ASCII作为源文件。

10-01 09:40
查看更多