「が」と「が」は等しいか?

間違い探しクイズのような感じですが、この二つの「が」は厳密には違います。

「が」 – U+304C

「が」 – U+304B U+3099

と、異なる文字で記述しています。見た目は(フォントなどによりますが)一緒です。話がややこしくなるので、1文字の方を「」、2文字の方をが」とします。
(U+3099 は、”Combining Katakana-Hiragana Voiced Sound Mark” という名前がついています。結合文字用の濁点です。)

なお、手元の環境 (Win7 + ATOK) で「が」を入力すると1文字の方の」でした。

ということは、String.Length をとると…

」 = 1

が」 = 2

となります。さらに、これらを入れたStringを比較すると…

Dim strOne As String = "が"  '---一文字の方です

Dim strTwo As String = "が"  '---二文字の方です

MsgBox(strOne = strTwo) '---FALSE が表示される

となります。確かにString オブジェクトの中身という観点では正しい挙動なのですが、見た目が同じなのでかなりややこしい問題の元になりそうです。

これをこうしてみます。

Thread.CurrentThread.CurrentCulture = New Globalization.CultureInfo("ja-JP")

MsgBox(String.Equals(strOne, strTwo)) '---FALSEが返却されます

MsgBox(String.Equals(strOne, strTwo, StringComparison.CurrentCulture)) '---TRUEが返却されます

後者のコードは、明示的に”ja-JP”カルチャーで比較するようにしたものです。

このあたりについては、MSDN : .NET Framework で文字列を使用するためのベスト プラクティス に詳しいのですが、やたらと話が入り組んでいてわかりにくいのが難点です。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Spam Protection by WP-SpamFree