管理人より 2020.11.27追記
本記事内容は、マルチバイト文字を出力するのみであれば問題ありませんが、scanf関数などで入力を伴う処理をした際は別の対処が必要です。
以下の記事に詳しく書いてありますので、参考になさってください。
scanf関数でうまく入力できない場合は以下リンクを参考
先日MinGWというgccコンパイラをインストールしたのですが、UTF-8で保存したC言語ソースコードをWindowsのコマンドプロンプトでコンパイルし実行したら見事文字化けしました。
gccのコンパイラ側のスイッチで
gcc test.c -finput-charset=UTF-8 -fexec-charset=CP932
などではうまくいかなかったため、上記方法にたどりつきました。
再現イメージ
普通にgcc ***.cとしてコンパイルして作成された実行ファイルa.exeをそのまま実行してみる。
見事に文字化け!
次にコマンドプロンプトをUTF-8の文字コード出力に対応させるコマンド
chcp 65001
を実行。(実行後は、コマンドプロンプト画面の情報がクリアされ、先頭行に「Active code page: 65001」と表示されます)
再度a.exeを実行してみると…
文字化けが解消した!
よく利用するのであれば、バッチファイルを作っておくといいと思います。(このバッチファイルをダブルクリックすると最初からUTF-8モードでコマンドプロンプトが起動します)
例)bakenai.bat
@echo off chcp 65001 cmd
しかし、文字化けって自分が悪いことした訳でもないのに、いやな気分になりますよね。
あっ、あとちなみにコマンドプロンプトの元の文字コードであるSHIFT-JISに戻す場合は、
chcp 932
と打ち込んでEnterキーを押して下さい。
コメント
とても参考になりました。
丁度どうやって直すか手をこまねいていたので助かりました。
管理人です。
WindowsならBorlandのC++ CompilerでC言語開発するのも手です。
文字化けを気にせず使えますし。
現在は以下で提供されているようです。
https://www.embarcadero.com/jp/free-tools
バッチファイルを作ってみたのですが、このサイトに載っている通りに入力したのにコマンドプロンプトが一瞬だけ表示されて消えてしまいます。原因は何でしょうか。もしご存じでしたらご享受していただけると幸いです。
管理人です。
以下のようなバッチファイルで試してみてください。
例)bakenai.bat
ご指摘ありがとうございます。
わたしが最初に記述した
bakenai.bat
の例ですが、コマンドプロンプトを起動した後に
bakenai [Enter]
などとUTF-8モードにするバッチファイルを起動することをイメージしていたため、単独でbakenai.batをダブルクリックするとすぐに消えてしまいます。
以前の記事が紛らわしい表現だっと思うので、ブログ内のバッチファイル例も併せて修正させていただきました。
ありがとうございました。
質問させてください。私もGCCでコンパイルしています。
私のPCではコマンドプロンプトでCHCP 65001とすると
‘chcp’ は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
とコマンド設定ができないのですが、どうしたらよいのかご存じでしょうか?
私はC言語を始めたての初心者なので易しく設定できる方法があれば
ご教授いただけると幸いです。
考えられる原因ですが、WindowsのPath設定を疑ってみてください。Path設定の確認方法に関しましては以下の記事にまとめましたので確認してみてください。
https://dianxnao.com/windows10%ef%bc%9apath%e8%a8%ad%e5%ae%9a%e3%82%92%e7%a2%ba%e8%aa%8d%e3%81%99%e3%82%8b/
質問にあるchcpコマンドですが、chcpの実行形式ファイルは、上記記事でも説明しているC:\Windows\system32にある「chcp.com」というファイルです。たぶん存在していると思いますが、一応確認してください。
このC:\Windows\system32(または%SystemRoot%\system32)の設定がPath設定にないと「cd」「dir」などのコマンドは実行できても「chcp」は実行できません。
ありがとうございました。
おかげさまで、パスの設定をしましたらCHCPの実行結果も得られました。
お礼申し上げます。