System.Char
のドキュメント (*1) を参照して「Unicode 文字を表します。」と書いてあるのを鵜呑みにし,第 4 水準の「𢌞」(廴+囘,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"); // 文字化けする } }
Microsoft の言う「Unicode」とは Unicode ではなく UTF-16LE のことである。ConvertFromUtf32()
の返り値が string
型なのを怪しく思いながら,なかなかその理由に気付けなかったことが敗因だった。
(*1) 古いバージョンを見たのがいけなかった。その後「文字をUTF-16 コード単位で表します。」と訂正されている。