11

次の 3 文字が対称でないのはなぜですかtoLower,toUpper結果

/**
  * Written in the Scala programming language, typed into the Scala REPL.
  * Results commented accordingly.
  */
/* Unicode Character 'LATIN CAPITAL LETTER SHARP S' (U+1E9E) */
'\u1e9e'.toHexString == "1e9e" // true
'\u1e9e'.toLower.toHexString == "df" // "df" == "df"
'\u1e9e'.toHexString == '\u1e9e'.toLower.toUpper.toHexString // "1e9e" != "df"
/* Unicode Character 'KELVIN SIGN' (U+212A) */
'\u212a'.toHexString == "212a" // "212a" == "212a"
'\u212a'.toLower.toHexString == "6b" // "6b" == "6b"
'\u212a'.toHexString == '\u212a'.toLower.toUpper.toHexString // "212a" != "4b"
/* Unicode Character 'LATIN CAPITAL LETTER I WITH DOT ABOVE' (U+0130) */
'\u0130'.toHexString == "130" // "130" == "130"
'\u0130'.toLower.toHexString == "69" // "69" == "69"
'\u0130'.toHexString == '\u0130'.toLower.toUpper.toHexString // "130" != "49"
4

2 に答える 2

13

最初のものについては、次の説明があります。

ドイツ語では、シャープ S (「ß」または U+00df) は小文字であり、「SS」の文字を大文字にします。

つまり、U+1E9E は小文字で U+00DF になりますが、U+00DF の大文字は U+1E9E ではありません。

2 つ目は、U+212A (ケルビン記号) を U+0068 (LATIN SMALL LETTER K) に小文字化したものです。U+0068 の大文字は U+004B (LATIN CAPITAL LETTER K) です。これは私には理にかなっているようです。

3 番目のケースでは、U+0130 (LATIN CAPITAL LETTER I WITH DOT ABOVE) はトルコ語/アゼルバイジャン語の文字で、U+0069 (LATIN SMALL LETTER I) に小文字化されます。何らかの形でトルコ/アゼルバイジャンのロケールにいる場合、適切な大文字バージョンの U+0069 を取得すると思いますが、それは必ずしも普遍的ではない可能性があります.

文字は必ずしも対称的な大文字と小文字の変換を持つ必要はありません。

編集:以下の PhiLho のコメントに対応するために、Unicode 6.0 仕様では、U+212A (KELVIN SIGN) について次のように述べています。

U+2126 OHM SIGN、 U+212A KELVIN SIGN、および U+212B ANGSTROM SIGN の3 つのレターライク シンボルには、通常の文字と正規の同等性が与えられています。3 つの例すべてで、通常の文字を使用する必要があります。テキストが Unicode Standard Annex #15「Unicode Normalization Forms」に従って正規化されている場合、これらの 3 文字は通常の同等の文字に置き換えられます。

つまり、実際には U+212A を使用するべきではなく、代わりに U+004B (LATIN CAPITAL LETTER K) を使用する必要があり、Unicode テキストを正規化する場合は、U+212A を U+004B に置き換える必要があります。

于 2011-09-20T21:07:20.607 に答える
3

Unicode と大文字と小文字に関する別の投稿を参照してもよろしいですか.. ある言語の記号は大文字と小文字で使用できる必要があると考えるのはよくある間違いです!

Java での Unicode 正しいタイトル ケース

于 2011-09-20T21:19:19.877 に答える