.NETのCLRは文字をUTF16で扱う
C#でソースコードをUTF8で扱おうが、アセンブラをCP932で書こうが、UTF16になっている。

C#の例
// hello.cs を utf-8で保存する
// コンパイル方法
// csc hello.cs
// A Hello World! program in C#
using System;
namespace HelloWorld
{
    class Hello
    {
        static void Main()
        {
            System.Console.WriteLine("熱風!疾風!サイバスター!!!!");
        }
    }
}

ここで作成されたアセンブリをildasmで逆コンパイルすると、文字列は次のようになる。
.method private hidebysig static void  Main() cil managed
{
  .entrypoint
  // コード サイズ       13 (0xd)
  .maxstack  8
  IL_0000:  nop
  IL_0001:  ldstr      bytearray (B1 71 A8 98 01 FF BE 75 A8 98 01 FF B5 30 A4 30   // .q.....u.....0.0
                                  D0 30 B9 30 BF 30 FC 30 21 00 21 00 21 00 21 00 ) // .0.0.0.0!.!.!.!.
  IL_0006:  call       void [mscorlib]System.Console::WriteLine(string)
  IL_000b:  nop
  IL_000c:  ret
} // end of method Hello::Main
一文字目の0xB171はリトルエンディアンなので0x71B1となる。
それはUnicode対応文字コード表によると「熱」を表す。


アセンブラの例
//hello_asm.asmとしてCP932で保存する.
// UNICODEはおけ―だがUTF8だと化ける。
//コンパイル方法
// ilasm hello_asm.asm
.assembly extern mscorlib { }
.assembly test { }

.method static void Main() cil managed {
    .entrypoint
    ldstr "熱風!疾風!サイバスター!!!!"
    call void [mscorlib]System.Console::WriteLine(string)
    ret
}

ここで作成されたアセンブリをildasmで逆コンパイルすると、文字列は次のようになる。

.method privatescope static void  Main$PST06000001() cil managed
{
  .entrypoint
  // コード サイズ       11 (0xb)
  .maxstack  8
  IL_0000:  ldstr      bytearray (B1 71 A8 98 01 FF BE 75 A8 98 01 FF B5 30 A4 30   // .q.....u.....0.0
                                  D0 30 B9 30 BF 30 FC 30 21 00 21 00 21 00 21 00 ) // .0.0.0.0!.!.!.!.
  IL_0005:  call       void [mscorlib]System.Console::WriteLine(string)
  IL_000a:  ret
} // end of method 'Global Functions'::Main

一文字目は0xB171 つまり、リトルエンディアンなのでUTF16の「熱」になる


つまり、C#だろうが、アセンブラだろうが、コンパイルして作成された文字はUTF16で処理されることが確認できる。


[PR]
by mima_ita | 2013-12-11 00:38 | .NET
<< VisualStudio200... .NETにおけるLarge O... >>



実験ですお
検索
カテゴリ
最新の記事
.NET4.5におけるasy..
at 2014-07-02 00:46
.NETでTwitterを検..
at 2014-06-29 00:49
Redmineのプラグインで..
at 2014-06-28 03:29
IO.popenのwrite..
at 2014-06-28 03:25
RedmineのWikiでU..
at 2014-06-28 03:16
以前の記事
最新のトラックバック
その他のジャンル
ブログパーツ