10

(为了避免过于本地化,我选择了 Ꙭ 作为示例,但许多其他字符也会发生这种情况)

字符 Ꙭ 是 \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,所以代理不应该有任何复杂性。好像我在这里遗漏了一些关键概念......

4

1 回答 1

6

看起来您的编辑器使用的字符编码与 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 作为源文件,这是有充分理由的。

于 2013-03-24T21:42:27.180 回答