プロが教える店舗&オフィスのセキュリティ対策術

まず
http://oshiete.goo.ne.jp/qa/8592830.html
上記内容で、スクリプト言語のスクリプトファイルの文字コードの質問をしたものです。

PHPやunixシェルは内部的に文字コード情報をもたたず
すべての文字列をバイト列として保持しており

pythonでは,文字列は内部的にオブジェクトが文字エンコーディング情報を持つ必要があるため事前にマジックコメントでスクリプトエンジンに教えてやる必要がある・・と
回答をいただきました。

それではたとえばjavaに置き換えると
javaはコンパイルすると文字列をすべてunicodeのコードポイントに変換するようです。
そのためjavaのソースファイルをコンパイルするときに
javac -encodingというコンパイルオプションがあるようです。ここで指定された文字コードからunicodeへと変換されていると・・・・。

ではC#はどうなのでしょうか?
cscコンパイラのコンパイルオプションには文字コードを指定するようなオプションは見つかりませんでした。
しかし
using System;
using System.Windows.Forms;
namespace test{


class AClass{

public string property = "";
public AClass(){

}
}


class TestClass{


public static void Main(string [] args){

AClass obj = new AClass();

obj . property = "文字列 ";

Console.WriteLine(obj. property);
MessageBox.Show(obj.property);
}
}
}

上記のようなコードをUTF-8およびSJIS-winでそれぞれ保存して、コンパイル後実行しても
文字化けすることなく「文字列」という表示がされました。
ただし、EUC-JPで保存したファイルをコンパイルすると、なんと文字化けしてしましまいました。
これはなぜでしょうか?

C#コンパイラはどこでどのようにコンパイル対象のプログラムファイルの文字コードを知り得ているのでしょうか?
そしてなぜ、UTF-8/SJIS-winは問題なく文字列と表示されたにもかかわらず
EUC-jpだと文字化けしたのでしょうか?
よろしくご教授ください。

ちなみにC#のコンパイラはコマンドプロンプロトから直接CSC.exeを実行しています。

A 回答 (1件)

まずは,MSDNの該当ページ。



・/codepage (C# コンパイラ オプション)
http://msdn.microsoft.com/ja-jp/library/w0kyekyh …
> ソース コードの作成時に使用されたコード ページがコンピューターで有効なコード ページと同じ場合、または UNICODE か UTF-8 の場合は、/codepage を使う必要はありません。
ちょっと説明がおかしな部分もありますが,
・ソースコードが使っているコードページと,cscのプロセスのコードページが同じ場合 (通常はユーザーのコードページ)
・UTF-16, UTF-8の場合 (ただし,UTF-8であってもBOMが必要)
の場合は/codepageの指定なしに正しくコンパイルできます。
それ以外の場合は,/codepageでコードページを指定する必要があります。
EUC-JPだと,51932でしょうか。ただし,全てのファイルをEUC-JPで書く必要があります。


ちなみに,Windowsのコードページ932に対してのMIME推奨名はWindows-31Jです。
まぁ,System.Text.Encodingはこの名前を受け付けてくれませんが……。
http://www.iana.org/assignments/character-sets/c …
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!