.NET Console出力のエンコード(文字コード)を変更する .NET 4.5編 (I18N)

@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プラグインの問題かもしれないけど)

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください