@ishisaka 前のDPで試したときはサロゲートペアダメだったけど、ベータではどうなっただろ…
— kkamegawa (@kkamegawa) 2012, 3月 6
@kkamegawaさんが左様な事を仰っていたので、UTF-16エンコードの試験をかねて、Windows 8 Consumer Preview上のVisual Studio 11, .NET Framework 4.5で検証してみました。
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleEncodeTest { class Program { static void Main(string[] args) { string notSurrogatePair = "叱る"; //新常用漢字表での叱るの字形はUTF-16だとサロゲートペア文字になる //参考 http://ja.wiktionary.org/wiki/%F0%A0%AE%9F string SurrogatePair = char.ConvertFromUtf32(0x20B9F) + "る"; //標準のエンコードを表示。しかし!ここで表示されるのはShift_JISで //Windows-31Jじゃない!!うそつきー!! Console.WriteLine("IANA Name : {0}", Console.OutputEncoding.WebName); //確認のためコードページも表示。932って表示されるよ! Console.WriteLine("Code Page : {0}", Console.OutputEncoding.CodePage); //UTF-8 BOM無しを指定してみる Console.OutputEncoding = new UTF8Encoding(); //utf-8 Console.WriteLine("IANA Name : {0}", Console.OutputEncoding.WebName); //65001が表示される。 Console.WriteLine("Code Page : {0}", Console.OutputEncoding.CodePage); //UTF-16 LE, BOM無しを指定する Console.OutputEncoding = new UnicodeEncoding(); //utf-16 Console.WriteLine("IANA Name : {0}", Console.OutputEncoding.WebName); //1200 Console.WriteLine("Code Page : {0}", Console.OutputEncoding.CodePage); //文字列の表示 //非サロゲートペア文字 Console.WriteLine(notSurrogatePair); //サロゲートペア文字 Console.WriteLine(SurrogatePair); Console.Read(); } } }
これの実行結果がこちら
サロゲートペア文字はおそらくフォントの関係か、コンソールホストの問題で文字化けしているが、特にエラーで落ちたりすることは無いです。
この点はDPよりカイゼンされているようです。
ん? うん? まてまて。
最初のエンコードがutf-8になってるじゃ無いか。えー!まじっすか?またしても大きな疑問点が。。。
(追記:0:49) コンソールからEXEを起動すると最初のエンコーディングとコードページはCP932なので、どうもVS11からデバッグをかけた場合らしいです。デバッグ無しで実行した場合も同様でした。
それよりもサロゲートペア文字があると記事を投稿できないWordPressに困った。。。(CodeColorプラグインの問題かもしれないけど)
コメント