gccによってUTF-8で出力する方法について

このQ&Aのポイント
  • gccコマンドを使用してCソースファイルから実行ファイルをビルドする際、オプション無しではエンコーディングがBOM無しのUTF-8で出力されます。
  • しかし、この場合、エディタで正しく表示されない可能性があります。
  • gccコマンドにはBOM付きのUTF-8で出力するオプションが存在するかどうか調べましたが、明確な情報は見つかりませんでした。
回答を見る
  • ベストアンサー

gccによって、BOM付きのUTF-8で出力する

こんにちは。 gccコマンドは、cygwinに付属していたものを使っています。 fopen関数でファイルを出力用にオープンし、fputs関数などで、何かしらの文字を書き込むCソースファイルを作成したとします。 このCソースファイルから、実行ファイルをビルドする際、 gccコマンドをオプション無しで使って実行ファイルをビルドし、その実行ファイルを実行すると、エンコーディングが"BOM無し"のUTF-8である出力ファイルが作成されます。 ですがこれだと、Emacsなどで開いた時に、バッファのコーディングシステムがraw-textになって、文字がきちんと表示されません。 gccコマンドには、ビルドされた実行ファイルが、エンコーディングが"BOM付き"のUTF-8であるファイルを出力するように指定する、オプションはありますでしょうか? 今回、ググっても1つも手掛かりが見つからなかったので、質問させて頂きましたので、 gccに詳しい方、是非よろしくお願い致します。

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

  • ベストアンサー
  • wormhole
  • ベストアンサー率28% (1622/5659)
回答No.1

この場合ファイルの入出力はcygwinのライブラリがやってるのでgcc関係ありませんが。 それにBOM付きにするとgccを含めたcygwinが提供するコマンドが対応してなさそうな気がしますけど。 emacsに関しては設定次第でBOMなしでもutf-8として認識させられるはず。

MetalLover
質問者

お礼

御回答ありがとうございます。 >それにBOM付きにするとgccを含めたcygwinが提供するコマンドが対応してなさそうな気がしますけど。 BOMは邪魔になるケースが多いんですね。 知りませんでした。 >emacsに関しては設定次第でBOMなしでもutf-8として認識させられるはず。 確かに、emacsの設定を変える方がよさそうですね。 そちらの路線で考えてみます。

その他の回答 (2)

回答No.3

gcc自体にはコード変換機能はありませんので、fputsの際の元データがUTF-8だっただけだと思われます。 ちなみに、LANG環境変数は設定されていますでしょうか。 Emacs使いではないので正確な回答は出来ませんが、LANGが正確に設定されていないとvim等も正確に表示出来ないですので・・・。

MetalLover
質問者

お礼

御回答ありがとうございます。 LANGの値は、ja_JP.UTF8に設定しているので、環境設定に関しては問題ないと思います。

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

fputs 自体にコード変換機能はありません。 UTF-8で書かれたものを出力したからUTF-8になっただけです。 BOMを出力したれば、明示的にBOMを出力してください。 文字コードは default-buffer-file-coding-system とか file-coding-system-alist とかでデフォルトの値を決めることもできます。 BOMを必要とするアプリの方が少なく、むしろ邪魔になるアプリも多いので、無理に付ける必要は無いと思います。

MetalLover
質問者

お礼

御回答ありがとうございます。 >文字コードは >default-buffer-file-coding-system >とか >file-coding-system-alist >とかでデフォルトの値を決めることもできます。 > これらについて調べてみて、試してみます。

関連するQ&A

  • Excel2000~2003でUTF-8BOM出力

    お世話になります。 Excel2000~2003ファイルで、 (現在、Excel2000ファイルを受け取って、  Excel2007上で互換モードとしてVBA作成中) で、ワークシート内容を、 「UTF-8のBOM付き」で、 VBAで、 (出来ましたらFSOを利用して) CSV出力する方法が知りたいです。 ネット上を探すとCSV出力する方法は、 いろいろありましたが、 サンプルを試しに動かして出力されたCSVファイルの 文字エンコードはShift-JISでした。 以上になります。 よろしくお願いします。

  • UTF-8のBOM無し保存

    現在Ubuntu8.10を利用しています。 普段プログラムを書くのにgeditを使ってるのですが、PHPやTclを書く時にBOMによるエラーが出てしまいます。 調べて見たところ、既に記述されたファイルからBOMを取り除く方法等は紹介されていますし、Windowsのメモ帳等でBOM無しで保存する方法は見つかるのですが、geditでファイルを保存するとき、BOM無しのUTF-8を既定の文字コードに設定することって出来ないのでしょうか? vimやemacsを使う方が無難でしょうか。。。

  • VC++でUTF-8のファイルを出力したい

    VisualStudio2005で以下のコードを実行したとき、ファイルをUTF-8で作成したいのですが、なにか方法がありますか? 現状では、SJISで出力されてしまいます。 ソースは、『ファイル』-『保存オプションの詳細設定』で『UTF-8(BOM付き)』にしてあります。 #include <stdio.h> int main(int argc, char* argv[]) {     FILE *fp;     fp = fopen( "c:/temp/log.txt", "w");     fprintf( fp, "%s\n", "あいうえお" );     fclose( fp );     return 0; } ちなみに、”あいうえお”の部分を(EmEditorで)SJISに無くてUTF-8にだけ存在する文字にした場合、VisualStudioのエディタ上では正しく文字が表示されます。 したがって、VisualStudio内ではリテラルの文字コードはUTF-8で扱われていると考えられます。・・・が、上記プログラムで出力すると文字化けします。つまり、SJISで出力されてしまいます。 ご教授のほど、よろしくお願いいたします。

  • gccのオプション

    今晩は、Cの初心者です。 gccをコンパイラでつかっていますが、このgccをコマンドプロンプトから実行する場合にgccのオプションを見たいのですが、 どのようにコマンドを打つとオプションが見れるのでしょうか。

  • UTF-8での保存について

     エディットボックスに入力してある日本語の文字列をUTF-8やUTF-8Nでテキストファイルに保存したのですがうまくいきません。  UTF-8の場合はファイルの先頭に3バイトのBOMをつければいいらしいので、 ファイルの先頭に0xEF,0xBB,0xBFの3バイトを追加してテキストファイルに保存しましたがメモ帳で開くと文字化けします(メモ帳で開くときは文字コードをUTF-8にして開いてます)。 作成したテキストファイルをバイナリエディタで開いてみると先頭の3バイトはEFBBBFとなっているので何も問題はないと思うのですが、どうして文字化けするファイルができてしまうのでしょうか? --- 実行環境 --- Microsoft Visual C++ 2010 Express WIN32 ユニコードビルド C言語

  • UTF-8とUTF-16について質問です。

    まず、【あ】という文字をUTF-16というエンコーディング方式で バイト配列化すると [0] => 66 [1] => 48 というバイト値が帰ってきます。 これはとりあえずC#で処理を行いました。 Encoding encode = Encoding.GetEncoding("UTF-16"); String value = "あ"; Byte [] byteData = encode.GetBytes(value); それでは【あ】という文字の文字集合のコードポイントは右記となります。【0x3042】 これは、出力された 66、48という数値を16進数に変換すると 66=>42 48=>30 となり、リトルエンディアン環境で 0x4230という16進数であらわされるようです。 この点も不思議なのですが今回知りたいのはUTF-16でエンコーディングされた バイト配列はこのように文字集合のコードポイントに復帰?させることができますよね? ではUTF-8でエンコーディングされた【あ】という文字の バイト配列 [0] => 227 [1] => 129 [2] => 130 というバイト配列を上記のような文字集合のコードポイントの値へ復帰させることは できるのでしょうか? それに伴いUTF-8でつかわれる文字集合もUTF-16と同じコードポイントなのでしょうか? 上記 1.UTF-8でエンコーディングされた文字列をバイト配列にした場合 元の文字集合に戻せるのか?戻せるならばその戻し方は? 2.UTF-8がさす文字集合とUTF-16がさす文字集合はおなじものですよね? 上記二点よろしくご教授ください。

  • VC++.NET と UTF-8

    C++ で書いたソースコードに UTF-8 エンコーディングで(日本語の)コメントをつけたのですが、そのコードを Visual Studio .NET でコンパイルするとコンパイルエラーになりました。 コメントを全部削除したらコンパイルできましたし、intel コンパイラ (windows/linux)、gcc (3.4.4 linux) ではコンパイルできたのですが、VC は UTF-8 が含まれているとコンパイルできない場合があるのでしょうか?あるいはソースが UTF-8 のときに有効なコンパイルフラグなどがあるのでしょうか?ちなみに IDE 上ではそれらのコメントは(文字化けなどなく)ちゃんと表示されてはいます。 よろしくお願いします。

  • encoding="UTF-16" ってUTF-16で書かれても。

     以前からずっと疑問だったのですが。。。  XML宣言の中に、エンコーディングを記述するところがありますが、その宣言文字列自体をそのエンコーディングで記述するというのはおかしくないでしょうか。  たとえば、UTF-16だったら、 encoding="UTF-16" と書くわけですが、これ自体がUTF-16で書かれているわけですよね? UTF-16で書かれているとわかっていたら宣言する必要はないし、宣言読まないとわからないんだったら、この宣言自体も読めないはずです。  今実際に、UTF-16で書かれていて、エンコーディング宣言もしているXML文書をあるソフトで読もうとしているのですが、1バイト目を読んだところで「Unexpected character. position = 0 」と出力されてエラーになります。  強制的にUTF-16で読ませる昨日もあるので、そうすればエラーは起こりませんが、それじゃエンコーディング宣言の存在自体に意味がないのでは? これは、最初の時点で読めないこと自体がこのソフトの不具合なのでしょうか?  これってどういうことなんでしょう。解決できるんでしょうか。

    • ベストアンサー
    • XML
  • 出力ページをUTF-8に

    CGIは全くの初心者で、いくつかの配布されたCGIを利用しています。 今回、HTMLファイル、JavaScriptファイル、CSSファイルの全ての文字コードをShift JISからUTF-8に変更しました。 Perlで出力されるページの文字コードもUTF-8にしましたが、CGIの方ではShift JISの指定のままのようです。 出来れば出力されたページもUTF-8のままにしたいのですが、どうすればいいのでしょうか?

    • 締切済み
    • CGI
  • C#でテキストをutf-8(BOM無し)保存したい

    C#で「名前を付けて保存」ダイアログでテキストを保存する際に、エンコードをutf-8のBOM無し形式で保存したいです。 今は、ただsaveFileDialogでそのまま保存しているだけですが、保存する際にエンコードをutf-8のBOM無しにするプログラムをご教授ください。 今は以下のようなプログラムを書いています。こちらでどのように追加すれば良いのかを教えてください。 //[名前を付けて保存]ダイアログをボックスを表示する saveFileDialog1.Filter = "UWSCファイル(*.uws)|*.uws"; //[ファイルの種類]ボックスの拡張子を設定。 saveFileDialog1.Filter = "DOTファイル(*.dot)|*.dot"; //[ファイルの種類]ボックスの拡張子を設定。 if (saveFileDialog1.ShowDialog() == DialogResult.OK) //ダイアログのOKがクリックされた場合は、 { System.IO.File.WriteAllText(saveFileDialog1.FileName, txtBox_ResultUWSC.Text, Encoding.Default); //txtBox_ResultUWSCの全テキスト内容を保存する。 } 以上、よろしくおねがいいたします。