C#プログラムファイルの文字コード

このQ&Aのポイント
  • C#プログラムファイルの文字コードについての質問
  • PHPやunixシェルは内部的に文字コード情報を持たず、バイト列として扱われる
  • Javaはコンパイル時に文字列をunicodeのコードポイントに変換するが、C#はどうなのか疑問
回答を見る
  • ベストアンサー

C#プログラムファイルの文字コード

まず http://okwave.jp/qa/q8592830.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を実行しています。

  • Java
  • 回答数1
  • ありがとう数0

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

まずは,MSDNの該当ページ。 ・/codepage (C# コンパイラ オプション) http://msdn.microsoft.com/ja-jp/library/w0kyekyh(v=vs.120).aspx > ソース コードの作成時に使用されたコード ページがコンピューターで有効なコード ページと同じ場合、または 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/character-sets.xhtml

関連するQ&A

  • 内部文字コードとは?

    javaは内部では文字をユニコードとして扱うとは、 どういう事でしょうか? 例えば、javaのブログラムをwindows上で作ったとして、 「こんにちわ」と出力させるプログラムを作ったとすると、 public class Hello{ public static void main(String[] args) { System.out.println("こんにちわ"); } } となりますよね、この時、このjavaのソースファイルを、 ユニコードとして保存して、コンパイル、実行しないと、 正常に動かないという事でしょうか? つまり、ソースをシフトJISで保存してJAVAでコンパイルをしようとすると、ソースコード中の文字をユニコードとして扱うため、 文字化けして、コンパイラは一体何の事か分からずエラーみたいな感じになるのでしょうか?(それとも自動で文字コードをユニコードに変換してくれるのかな?) 要するに、「内部文字コード」という言葉が何を指しているのかが分からないですが、よろしくお願いします。

  • JAVAでSJISのコード変換

    JAVAで、UnicodeからSJISへのコード変換を行った上で ファイル出力を行いたいです。 たとえば文字列中にある「(1)」の文字コードが以下である時 ------------------------------- SJIS:8744 - UNICODE:2464 ------------------------------- 2464のコードを8744に変換した上でファイル出力したいです。 処理として、以下の様な形を考えているのですが 文字化けしてしまします。 ------------------------------- String source = "(1)あああああ"; 文字列の数分ループ処理↓ int code = (int) (source[x].charAt(i)); if (code == 2464) { strBuff.append(String.valueOf((char) (8744))); } ------------------------------- Unicodeで扱われているので「getByte("SJIS")」などとしているのですが 同様の結果となります。 何か良い手はないものでしょうか?

    • ベストアンサー
    • Java
  • SJIS→UTF-8の文字コード変換

    Perlで、SJISの16進で表記された文字があるのですが、それがうまく表示できません。 Unicodeの16進文字コードだとうまく表記できるのですが…。 以下がスクリプトです。 以下の場合だと。(句点)がSJISだと0x8142で、 その16進文字列を表示したいのですが、実行結果にあるエラーが出てしまいます。 Unicodeだと。は0x3002なのですが、うまく表示できています。 すみませんがよろしくお願いします。 ---------------------------------------- # このファイルの文字コードはSJIS # 改行コードはLF # # 。 SJIS 0x8142 # Unicode 0x3002 # use Jcode; use encoding "sjis"; $a = 0x8142; $a = Jcode->new($a, "sjis")->utf8; printf("句点の表示…%c\n",$a); printf("句点の表示…%c\n",0x3002); ---------------------------------------- 実行結果 "\x{8142}" does not map to shiftjis at test.pl line 14, <DATA> line 846. 句点の表示…\x{8142} 句点の表示…。

    • ベストアンサー
    • Perl
  • 文字コードが知りたい

    既存のテキストファイル(メモ帳)があるのですが このファイルの文字コードが ANSIなのかUnicodeなのかUTF-8なのかってどうやったらわかりますか? プロパティを見てもわかりませんでした。

  • 文字コードに関することです

    こんばんは。 社会人1年目でSEをやっております。 来週文字コードについて、発表することになっています。 発表内容として 文字コードの種類としてsjis.unicode.EUCなどがあり、これらの文字コードについて説明します。 しかし、どの程度のレベルまで説明すればいいのか悩んでいます。 私の考えとしては、unicodeを例にあげさせていただきますが、 unicodeとは、世界の言語を1文字2バイトを用いて表現できる文字コードです。unicodeの中でも大きく分けて2種類utf-8、utf-16に分けられます。 次に各utfの詳細な説明に入ります。 こんな具合にそれぞれの文字コードについて、説明していってもよろしいですか?? あと、utf-8がなぜ必要になったのか、教えていただけますでしょうか?? よろしくお願いします。

  • c-boardの文字コード

    c-boardという掲示板をいじっています。 この掲示板CGIが使用している文字コードが分かりません。 sjisを使用しているように思うのですが 禁止ワードのチェックなど内部文字列の処理に関して(sjisでは問題があるはずなので) 文字コードはどうなっているか分かる方がいたら教えてください。

    • ベストアンサー
    • CGI
  • javaのファイル読み込み時の文字コードについて

    当方プログラム初心者です。 文字コードがSJIS以外(EUCなど)のテキストファイルをBufferdInputStreamで読み込み、readline()したものをprintlnすると、この時点でファイル内の文字が文字化けします。 環境はEclipseで、実行時はUTF-8でエンコードされるようになっています。 ファイルはサクラエディタで作成し、保存時に文字コードをEUCやSJISに設定しています(デフォルトではSJISで保存される)。 ファイル内の文字列は「ABCDE123アイウエオ」が入っている前提です。 BufferedReaderにInputStreamReaderをラップし引数に読み込みたい文字コードを指定してもダメ、文字コードの引数にJISAutoDetectを指定してもダメ、Eclipseの実行構成をテキストファイルと同じ文字コードにしてもダメでした。 取り急ぎで本当にすみません。皆様の知恵をお貸しください。。。

    • ベストアンサー
    • Java
  • ■文字コード判定■

    あるバッファに入っている文字列の文字コード(ANSI、SJIS、UNICODEなど)を判定したいのですが、色々と調べたのですが、解決しませんでした。 ANSIでもUNICODEでもきちんと文字列を扱えるアプリケーションを開発しています、問題となる例です↓ (メッセージボックス) int MessageBox_OK( HWND hWnd, LPCTSTR lpCaption, LPCTSTR lpText ) { int ret; int len_w; LPWSTR wCaption, wText; //変換後の、UNICODE文字列取得バッファ //コンパイル設定がUNICODEの時に、ANSIをUNICODEに変換する #ifdef UNICODE //ここで文字コードを判定したいです|・ω・`) //UNICODEでなかったらUNICODEに変換する len_w = AnsiToUnicode_Size( lpCaption ); len_w = len_w * sizeof(WCHAR); wCaption = (LPWSTR)malloc( len_w + 1 ); AnsiToUnicode_Convert( lpCaption, wCaption ); //ここで文字コードを判定したいです|・ω・`) len_w = AnsiToUnicode_Size( lpText ); len_w = len_w * sizeof(WCHAR); wText = (LPWSTR)malloc( len_w + 1 ); AnsiToUnicode_Convert( lpText, wText ); #else return MessageBox( hWnd, lpText, lpCaption, MB_OK ); #endif return MessageBox( hWnd, wText, wCaption, MB_OK ); } //ANSI→UNICODE (必要サイズ(文字数)) int AnsiToUnicode_Size( LPCSTR strAnsi ); //ANSI→UNICODE (変換) BOOL AnsiToUnicode_Convert( LPCSTR strAnsi, LPWSTR strUnicode ); よろしくお願いします。

  • PHPの文字コード変換について

    PHPで mb_convert_encodingを用いて UTF-8で記述されたPHPスクリプトファイルの PHPファイル内の任意の文字列の文字コードを変換する場合、 $value = "文字列"; $str = mb_convert_encoding($value ,"UTF8","UTF8"); print $str; この場合、特に問題なく、変換がおこなわれます というか、意味のないで処理ではありますが。 次に $str = mb_convert_encoding($value,"EUC-JP","EUC-JP"); とした場合 うまく文字列の文字コードの変換がおこなわれず 出力内容は文字化けします。 次に $str = mb_convert_encoding($value,"SJIS","SJIS"); とした場合 EUC-JPと同じく文字コード変換に失敗し 文字化けするだろうとおもいましたが おもいのほかブラウザの文字コードUTF-8のままで文字化けしていないのです。 これはどういう現象でしょうか? たとえば一つ目は UTF8で記述されたPHPファイルの文字列をそのままUTF-8として 変換されせるのですから、問題ないはずです。結果問題ありません。 二つ目は UTF-8でかかれたPHPファイルの文字列をEUC-JPでかかれたファイルとして EUC-JPという文字コードに変換しなさいという命令ですよね? これは思う通りにいかなくて文字化けした文字列が出力されるのはわかるのですが 三つ目はUTF8で記述された文字列をSHIFT-JISとしてSHIFT-JISに変換しようとしているにも かかわらず、結果問題なくブラウザのUTF-8で文字列と表示されてしまいます。 これはいったいどういう事なのでしょうか? これが仮に $str = mb_convert_encoding($value,"SJIS","UTF-8"); なら話は簡単んです。 UTF-8で記述されたファイルの任意の文字列を UTF8からSJISに変換しようとしているのですから問題なく SHIFT-JISでエンコーディングされた文字列が帰ってくるはずです。 こ乃原因をご存知のかたよろしくご教授ください。 お願い致します。

    • ベストアンサー
    • PHP
  • VB6での文字コードダンプ

    VB6を使用して文字のダンプを取得したいのですが、UNICODE→SJIS変換しての バイト長を取得するものはよく見かけるのですが、全角文字の文字コードの取得法は、調べてはいるのですがなかなか見つかりません。 行いたいことは、全角の"あ"の場合、0x82、0xa0のように SJISでの1バイト毎の16進(10進でも可)の文字コードを 取得したいということです。 よろしくお願いします。