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


コメント