大文字小文字変換にご注意あれ Java編

Javaネタばっかり書いている元Javaプログラマ村上です。

今回は大文字⇔小文字変換に関する内容です。
Javaで大文字小文字変換する時はこんな感じですよね?

これを利用して全て小文字で構成されている文字列かどうか判断する時は

ただこれがある環境ではうまいこと動かないんです。
それは、中央アジア全体やモンゴル高原以西にあるアルタイ山脈を中心に東ヨーロッパから北アジアに至る広大な地域です。

つまり、String#toLowerCase()やString#toUpperCase()はロケール依存するってことです。

東ヨーロッパのトルコのロケールでアルファベット「I」の小文字変換をしてみると

「i」の上のポチがなくなってます。
これがトルコの「i」らしいです。

ちなみに「I」は「İ」でポチが出現しました。

変換の4パターンを実行してみました。

大文字 ⇒ 大文字、小文字 ⇒ 小文字では変換は行われないみたいですね。

このような変換が行われるアルファベットと言語を調べてみました。
アルファベットは大文字小文字、言語は139言語で行いました。
するとトルコ語以外にアゼルバイジャン語もトルコ語と同じ変換になりました。

あと、Javaのコードを見るとこんなコードが

trはトルコ
azはアゼルバイジャン
ltはリトアニアでした。

でもリトアニアの変換はうまくいってたんですけどね。謎。。。。

ちなみにJavaScriptではtoLowerCase()とtoLocaleLowerCase()が用意されていて、
ロケールがトルコの場合、toLocaleLowerCase()は「ı」を返すようです。

国際化対応っていろいろと難しそうですね。

Comments are closed, but you can leave a trackback: Trackback URL.