ちょっと調べただけですが、面白かったのでメモ。世界は広いですね。バベルの塔ですね。
ß
ドイツ語では、ß (U+00DF 、エスツェット) を大文字にすると SS になるらしい。
鬼車 (Ruby や PHP で使われている正規表現エンジン) はこれに対応していて、ignore case にすると、一文字が複数の文字にマッチして驚く。
# coding: UTF-8 p "-SS-"[/-\u00DF-/i] #=> "-SS-" p "-\u00DF-"[/-SS-/i] #=> "-\u00DF-"
こういう関係の字は他にもあるみたい。
ref: ftp://ftp.unicode.org/Public/UNIDATA/SpecialCasing.txt
İ と ı
トルコ語やアゼルバイジャン語では i と I が別の字らしい。i の大文字は İ (U+0130 、点つきの I) で、I の小文字は ı (U+0131 、点なしの i) だそうな。ASCII の範囲でこういうことがおきるのは相当不幸ですね。
鬼車では USE_UNICODE_CASE_FOLD_TURKISH_AZERI を定義してビルドすることでトルコ語・アゼルバイジャン語モードに切り替えられるらしい (けど、試したことはないです) 。
DZ 、Dz 、dz
今年の LL で shinh さんが「Python の istitle() って何に使うんだろう」と言ってて、それの答えのひとつかどうかはわかりませんが、d と z をくっつけた字があるらしい。
リリースされたばかりの Python 3.0 で試すと、こんな感じだった。
isupper | istitle | islower | upper | title | lower | |
DZ (U+01F1) | True | True | False | DZ | Dz | dz |
Dz (U+01F2) | False | True | False | DZ | DZ | dz |
dz (U+01F3) | False | False | True | DZ | Dz | dz |
あれ、"Dz".title() が "DZ" になるのはバグような気がする……。
それはともかく、この文字を使うのはポーランド語やマケドニア語やスロバキア語やハンガリー語などみたいなんだけど、ポーランド語の wikipedia ですら使われてないような。わざわざ別の文字として登録する必要があったんだろうか。などと考えると、中国の漢字と日本の漢字で似てるやつを unify した外国人の気持ちがわかる。
uppercase と titlecase が異なる字としては、他にも DŽ と Dž 、LJ と Lj 、NJ と Nj が見つかった。
ref: ftp://ftp.unicode.org/Public/UNIDATA/UnicodeData.txt