kkamegawa's weblog

Visual Studio,TFS,ALM関係のことについていろいろと書いていきます。Google Analyticsで解析を行っています

愛が重ならない.NET Framework 2.0

なんというタイトルだと思われるかもしれませんが。

      Console.WriteLine("{0}", "愛々,1,2,3".IndexOf(","));

これを実行してみましょう。結果は?なんと1です。PowerShellでも(当然)同じ結果になります。

$a = "愛々,1,2,3"
$a.indexof(",")
1

々がいけないのかと思ったのですが、これは2になります。

$a = "同々,1,2,3"
$a.indexof(",")
2

面白いことに、.NET Framework 3.5SP1(確認してないけど.NET Framework 2.0以降)ではこうなりますが、.NET Framework 1.1(Visual Studio .NET 2003)では2が返却されます。OS問わないのかもしれません。そこでこんなプログラムを作ってみました。とりあえずCJK統合漢字の範囲でどれだけ判定誤りが発生するか?ということです。

            string check = string.Empty;

            for(char target = '\u4e00';target <= '\u9fa0';target++)  {
                check = string.Format("{0}々,1234", target);
                if(check.IndexOf(",") != 2)  {
                    int hex = target;
                    Console.WriteLine("U+{0} が判定誤り。", hex.ToString("x"));
                }
            }

結果はこう。いちいち文字があるかどうかみていませんが、あってるよね(^^;。

U+4e9c が判定誤り。
U+4edd が判定誤り。
U+4fde が判定誤り。
U+4fe0 が判定誤り。
U+4fe2 が判定誤り。
U+4fe6 が判定誤り。
U+4fe7 が判定誤り。
U+4fe8 が判定誤り。
U+4fe9 が判定誤り。
U+4fea が判定誤り。
U+54c0 が判定誤り。
U+5516 が判定誤り。
U+59f6 が判定誤り。
U+5a03 が判定誤り。
U+5f9d が判定誤り。
U+5f9f が判定誤り。
U+5fa2 が判定誤り。
U+5fa3 が判定誤り。
U+5fa4 が判定誤り。
U+5fa5 が判定誤り。
U+5fa6 が判定誤り。
U+5fa7 が判定誤り。
U+611b が判定誤り。
U+6153 が判定誤り。
U+6175 が判定誤り。
U+6187 が判定誤り。
U+618a が判定誤り。
U+6191 が判定誤り。
U+6194 が判定誤り。
U+6196 が判定誤り。
U+6199 が判定誤り。
U+619a が判定誤り。
U+61ab が判定誤り。
U+61ac が判定誤り。
U+61ae が判定誤り。
U+61ca が判定誤り。
U+61cc が判定誤り。
U+6328 が判定誤り。
U+6f6c が判定誤り。
U+6f71 が判定誤り。
U+6f72 が判定誤り。
U+6f73 が判定誤り。
U+6f75 が判定誤り。
U+6f76 が判定誤り。
U+6f77 が判定誤り。
U+6f79 が判定誤り。
U+7f3e が判定誤り。
U+7f3f が判定誤り。
U+7f40 が判定誤り。
U+7f41 が判定誤り。
U+7f42 が判定誤り。
U+7f43 が判定誤り。
U+7f44 が判定誤り。
U+7f46 が判定誤り。
U+7f48 が判定誤り。
U+7f49 が判定誤り。
U+7f4a が判定誤り。
U+7f4b が判定誤り。
U+8f18 が判定誤り。
U+8f1a が判定誤り。
U+8f1e が判定誤り。
U+8f20 が判定誤り。
U+8f21 が判定誤り。
U+8f22 が判定誤り。
U+8f23 が判定誤り。
U+8f24 が判定誤り。
U+8f25 が判定誤り。
U+963f が判定誤り。
U+9ef3 が判定誤り。
U+9ef5 が判定誤り。
U+9ef8 が判定誤り。
U+9efa が判定誤り。
U+9efe が判定誤り。
U+9eff が判定誤り。
U+9f00 が判定誤り。

connectでもIndexOf()の仕様に苦しめられている(?)人はちらほら見かけます。たとえばこれ。
string class indexof bug | Microsoft Connect
うーん、SHIFT-JISな世界なら気持はわかる。それはさておき、connectへ登録してみました。
フィードバック:"愛々,123".IndexOf(",")が不正な結果を返す
(追記)
寝る前に「言語学的な何かがあるのかもしれない」とかおもったけれど、やっぱりまずいと思うので、MVPインシデント使ってでも直してもらいたいなぁ。