[C#] char は全ての Unicode 文字を表せる訳ではない

Monday, October 8, 2012

System.Char のドキュメント (*1) を参照して「Unicode 文字を表します。」と書いてあるのを鵜呑みにし,第 4 水準の「&#140062」(廴+囘,U+2231E) という字を char に入れようとして失敗した。

public class Program
{
    public static void Main()
    {
        string s = char.ConvertFromUtf32(0x2231e);
        char c = s[0];

        MessageBox.Show(s.ToString(), "s"); // 表示される
        MessageBox.Show(c.ToString(), "c"); // 文字化けする
    }
}

U_2231E_MsgBox.png

Microsoft の言う「Unicode」とは Unicode ではなく UTF-16LE のことである。ConvertFromUtf32() の返り値が string 型なのを怪しく思いながら,なかなかその理由に気付けなかったことが敗因だった。


(*1) 古いバージョンを見たのがいけなかった。その後「文字をUTF-16 コード単位で表します。」と訂正されている。

コメントを残す

メールアドレスが公開されることはありません。

thirteen − seven =