C言語の基本|コマンドプロンプトで日本語を表示する

文字化けで止まらないために、C言語の日本語表示をコマンドプロンプトからやさしく整えよう。

C言語の学習を始めると、最初は Hello World のような短い文字表示から練習することが多いです。
英語だけを表示している間は問題なく動いていたのに、表示する文章を日本語に変えた途端、コマンドプロンプトに読めない文字が並んでしまうことがあります。

このような現象は、C言語の文法ミスではなく、文字コードの違いが原因になっていることがよくあります。
特にWindowsのコマンドプロンプトでは、VS Codeで保存したソースファイルの文字コードと、コマンドプロンプトが表示に使う文字コードが合っていないと、日本語が正しく表示されない場合があります。

この記事では、文字コードとは何か、なぜ文字化けが起こるのか、Windowsのコマンドプロンプトで日本語を表示するには何をすればよいのかを、C言語の学習者向けにやわらかく整理していきます。最後には、日本語表示を確認するための短いCプログラムも使って、実際の流れを確認します。

文字コードとは何か

コンピュータは、文字をそのまま文字として理解しているわけではありません。
内部では、文字を数値に置き換えて扱っています。このとき、「どの文字をどの数値として扱うか」を決めるルールが文字コードです。

たとえば、英数字だけなら比較的シンプルに扱える場面が多いですが、日本語にはひらがな、カタカナ、漢字、記号など多くの文字があります。そのため、日本語を扱うときは、保存する側と表示する側で同じ文字コードの考え方を使うことが大切です。

項目内容C言語学習でのポイント
文字コード文字を数値として表すためのルール文字列を正しく表示するための土台
文字化け文字コードの解釈が合わず、別の文字のように表示される現象プログラムが正しくても発生することがある
保存側の文字コードVS Codeなどのエディタがファイルを保存するときの形式UTF-8で保存されることが多い
表示側の文字コードコマンドプロンプトなどが文字を表示するときの形式Windowsでは設定確認が必要
一致の重要性保存側と表示側のルールを合わせること日本語表示トラブルを減らせる

ここで大切なのは、保存側と表示側を分けて考えることです。
VS Codeで書いたソースコードがUTF-8で保存されていても、コマンドプロンプト側が別の文字コードとして表示しようとすると、日本語が崩れて見えることがあります。

図1:保存側と表示側の文字コードの関係

この図から分かること

日本語表示では、Cプログラムの内容だけでなく、ソースファイルを保存した文字コードと、コマンドプロンプトが表示に使う文字コードの両方が関係します。VS Code側がUTF-8でも、表示側の設定が合っていないと文字化けすることがあります。つまり、プログラムと実行環境をセットで確認することが大切です。

この記事で出てくる重要な項目

コマンドプロンプトで日本語を表示するために、いくつかの用語を先に整理しておきましょう。
用語を知っておくと、あとでトラブルが起きたときに原因を切り分けしやすくなります。

項目役割この記事での位置づけ
文字コード文字を数値に変換するルール日本語表示の前提知識
Shift-JISWindowsで長く使われてきた日本語向け文字コードcmdの初期設定として関係することがある
UTF-8現在広く使われている文字コードVS Codeや多くの開発環境で使われる
文字化け文字コードの不一致で起きる表示崩れ今回扱う主なトラブル
コマンドプロンプトWindowsのCLICプログラムの実行結果を表示する場所
chcp 65001コードページをUTF-8に変更するコマンド文字化け対策の中心
VS Codeソースコードを作成・保存するエディタUTF-8保存の前提になりやすい
Mac/LinuxのCLImacOSやLinuxのターミナルWindowsとの違いを考える比較対象

C言語の学習では、コードの文法だけを見ていると、文字化けの原因に気づきにくいことがあります。
文字化けは、ソースコード、保存形式、表示環境が関係するため、どこでズレているのかを順番に確認することが大切です。

Shift-JISとUTF-8の違い

日本語を扱うときによく出てくる文字コードが、Shift-JISとUTF-8です。
どちらも日本語を扱える文字コードですが、使われてきた場面や他の環境との相性に違いがあります。

比較項目Shift-JISUTF-8
主な用途旧来のWindows日本語環境でよく使われた現在の開発環境やWebで広く使われる
互換性日本語Windowsでは扱いやすい場面もある多言語や他OSとの互換性が高い
VS Codeとの相性設定によっては保存形式が異なる初期設定で使われることが多い
cmdでの初期状態日本語環境で関係することがあるchcp 65001 で合わせられる
学習上の扱いやすさ環境依存の知識が必要今後の学習や開発でも使いやすい

現在の開発ではUTF-8を使う場面が多く、VS CodeでもUTF-8で保存する流れが一般的です。
一方で、Windowsのコマンドプロンプトは、環境によって最初からUTF-8になっていない場合があります。このズレが、日本語表示の文字化けにつながります。

文字化けはなぜ起こるのか

文字化けは、日本語が壊れたように見える現象です。
ただし、実際にはデータが壊れているというより、文字の読み取りルールが合っていないために、別の文字として表示されていることが多いです。

状況保存形式表示側設定結果
英数字のみUTF-8Shift-JIS系問題が目立ちにくいことがある
日本語ありUTF-8Shift-JIS系文字化けが起きやすい
日本語ありUTF-8UTF-8正しく表示されやすい
日本語ありShift-JISShift-JIS正しく表示されやすい
日本語ありShift-JISUTF-8文字化けすることがある

英数字だけを表示しているときは、文字コードの違いに気づきにくいことがあります。
しかし、日本語を表示した瞬間に、保存側と表示側のズレが表面化しやすくなります。

たとえば、C言語で次のような日本語メッセージを表示する場合を考えます。

printf("今日もC言語を学ぼう\n");

プログラムの書き方が正しくても、コマンドプロンプト側の文字コード設定が合っていないと、実行結果が文字化けすることがあります。

コマンドプロンプトで日本語を表示するための設定

Windowsのコマンドプロンプトで日本語を表示しやすくするには、コードページをUTF-8に切り替えます。
そのために使うコマンドが chcp 65001 です。

chcp 65001

このコマンドは、コマンドプロンプトの表示に使うコードページをUTF-8へ変更するために使います。
65001 はUTF-8を表すコードページ番号です。

手順入力内容・操作目的補足
1cmdを起動するコマンドプロンプトを開くWindowsの実行環境を準備する
2chcp 65001 を入力するコードページをUTF-8に変更する日本語表示のズレを減らす
3gccでコンパイルする実行ファイルを作る通常のコンパイル手順でよい
4プログラムを実行する日本語表示を確認する文字化けしないか見る
5cmdを開き直したあと必要なら再度 chcp 65001 を入力する設定が戻ることがある

特に見落としやすいのが、cmdを閉じると設定が戻ることがある点です。
chcp 65001 は、現在開いているコマンドプロンプトに対して有効になる設定です。新しくcmdを開いたときは、再度入力が必要になる場合があります。

図2:chcp 65001で日本語表示を整える流れ

この図から分かること

chcp 65001 を入力すると、コマンドプロンプトのコードページをUTF-8へ切り替えられます。VS CodeでUTF-8として保存したCプログラムを実行するとき、cmd側もUTF-8に合わせることで、日本語メッセージが正しく表示されやすくなります。コンパイル前または実行前に設定しておくことがポイントです。

コマンドプロンプトで日本語を表示するプログラム

ファイル名:message_jp.c

#include <stdio.h>

int main(void)
{
    /* 日本語のメッセージを表示する */
    printf("今日もC言語を学びます。\n");
    printf("コマンドプロンプトで日本語表示を確認します。\n");

    /* 正常終了 */
    return 0;
}

実行結果の例

今日もC言語を学びます。
コマンドプロンプトで日本語表示を確認します。

このプログラムは、日本語の文字列がコマンドプロンプトで正しく表示されるかを確認するための例です。
処理内容はとてもシンプルで、printf を使って2行の日本語メッセージを表示しています。

記述役割くわしい説明
#include <stdio.h>標準入出力の機能を使う準備printf を使うために必要
int main(void)プログラムの開始地点C言語ではmain関数から実行が始まる
printf("今日もC言語を学びます。\n");日本語メッセージを表示文字コード設定の確認に使える
printf("コマンドプロンプトで日本語表示を確認します。\n");2行目の日本語を表示複数行の表示確認ができる
return 0;正常終了を返す問題なく終了したことを表す

このプログラムでは、日本語の文字列を含めているため、文字化け確認に向いています。
英数字だけの表示では問題が見えにくい場合でも、日本語を表示すると、保存形式と表示側設定のズレを確認しやすくなります。

実行コマンドの流れ

ここでは、ファイル名を message_jp.c として保存した場合の流れを確認します。
まず、コマンドプロンプトを開き、必要に応じてファイルを保存したフォルダーへ移動します。

次に、cmd側をUTF-8に切り替えます。

chcp 65001

そのあと、GCCでコンパイルします。

gcc message_jp.c -o message_jp

最後に、作成された実行ファイルを起動します。

message_jp
手順コマンド何をしているか
1chcp 65001コマンドプロンプトをUTF-8表示に切り替える
2gcc message_jp.c -o message_jpCソースをコンパイルして実行ファイルを作る
3message_jp実行ファイルを起動して結果を表示する

この流れでは、日本語表示の準備、コンパイル、実行の順番が大切です。
C言語学習ではgccに注目しがちですが、日本語を表示する場合は、その前にコマンドプロンプトの文字コード設定も確認しておくと安心です。

文字化けした場合の確認ポイント

chcp 65001 を入力しても文字化けする場合は、別の要因が関係していることがあります。
そのときは、次の順番で確認すると落ち着いて対応できます。

確認ポイントチェック内容対応の例
VS Codeの保存形式ファイルがUTF-8で保存されているか右下の文字コード表示を確認する
cmdのコードページchcp 65001 を実行したか再度入力して状態を確認する
フォント日本語表示に対応したフォントかcmdのフォント設定を見直す
実行タイミングchcp 65001 の前に実行していないかUTF-8へ切り替えたあとに実行する
実行ファイル古い実行ファイルを動かしていないかもう一度コンパイルしてから実行する
別ターミナルPowerShellやWindows Terminalを使っているか環境ごとの文字コード設定を確認する

学習中は、文字化けを見ると「コードを間違えたのかな」と不安になりやすいです。
しかし、日本語表示の問題は、C言語の文法ではなく、表示環境の設定が原因になっていることも多いです。エラーと文字化けを分けて考えると、トラブル対応がしやすくなります。

図3:文字化けしたときの確認ルート

この図から分かること

文字化けが起きたときは、C言語の文法だけを見るのではなく、保存形式、cmdのコードページ、フォント、再コンパイルの有無を順番に確認することが大切です。特に、VS CodeでUTF-8保存になっているか、cmdで chcp 65001 を実行したかは、最初に見ておきたいポイントです。

MacやLinuxではどうなるか

macOSやLinuxのCLIでは、最近の環境ではUTF-8が標準になっていることが多いです。
そのため、Windowsのコマンドプロンプトのように、毎回 chcp 65001 を入力しなくても日本語が表示できる場合があります。

項目Windows コマンドプロンプトMac / Linux のCLI
初期の文字コード設定UTF-8ではない場合があるUTF-8のことが多い
日本語表示の準備chcp 65001 が必要になることがある追加設定なしで表示できることが多い
学習時の注意点文字化け対策を最初に覚える実行権限やパスの理解が中心になりやすい
C言語のコード基本的に同じ基本的に同じ

C言語の書き方自体は、WindowsでもMacでもLinuxでも大きく変わりません。
ただし、実行環境の初期設定には違いがあります。Windowsで日本語表示につまずいたとしても、それはC言語の理解不足とは限りません。環境差として自然に起こることなので、落ち着いて設定を確認していきましょう。

よく使う確認コマンド

コマンドプロンプトで日本語表示を確認するときは、最低限次のコマンドを覚えておくと便利です。

コマンド用途
chcp現在のコードページを確認する
chcp 65001コードページをUTF-8に変更する
gcc message_jp.c -o message_jpCソースをコンパイルする
message_jp実行ファイルを起動する

chcp だけを入力すると、現在のコードページを確認できます。
chcp 65001 を入力すると、UTF-8へ切り替えられます。日本語を含むCプログラムを実行する前に、この流れを確認しておくと安心です。

補足:インターフェースという言葉

インターフェースは、コンピュータとユーザーがやり取りするための接点という意味で使われます。
今回のテーマでいうと、コマンドプロンプトはCLI、つまり文字で命令を入力して操作するインターフェースです。

C言語の学習では、VS Codeでソースコードを書き、コマンドプロンプトでコンパイルや実行を行います。
このとき、コマンドプロンプトは単なる黒い画面ではなく、C言語のプログラムを動かし、結果を確認するための大切な作業場所になります。