10

(これがローカライズされすぎて閉じられないように、例としてꙬを選択しましたが、これは他の多くのキャラクターでも発生します)

文字Ꙭは\uA66Cまたは10進数の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は、デフォルトで、マシンでデフォルトとして設定されているエンコーディングを選択します。-encodingjavacの変更に使用します。

UTF-8のꙬはラテン語1(または同様のもの)でê¬(0xEA 0x99 0xAD)として表示されます。これは、3文字であるため、文字リテラルには無効です。

3と4に関しては、比較的新しいUnicode 5.1.0(2008年3月)で導入されたようです。これは、使用しているJavaのバージョンではおそらくサポートされていません。どうやらJavaSE6はUnicode4.0を使用しています。JavaSE7はUnicode6.0.0を使用します。

ほとんどの人は、正当な理由で、ソースファイルをUSASCIIに固執しています。

于 2013-03-24T21:42:27.180 に答える