Visual Studio Code(VSCode)でプログラムを実行したら、ターミナルに表示される日本語が文字化けして「���」や「?????」のような記号になってしまった…
これはVSCodeユーザーが必ず一度は遭遇する、非常に一般的な問題です。でも安心してください。原因さえ分かれば、確実に解決できます。
この記事では、VSCodeのターミナル文字化けの原因と、OS別・言語別の具体的な解決方法を、初心者にも分かりやすく解説します。
文字化けが起こる原因

まず、なぜ文字化けが発生するのか、その仕組みを理解しましょう。
文字コード(エンコード)の不一致
文字化けの根本原因は、「ソースコードの文字コード」と「ターミナルの文字コード」が一致していないことです。
例:Windowsでよくあるケース
- ソースコード:UTF-8で保存されている
- ターミナル:Shift_JIS(CP932)で表示しようとする
- 結果:文字コードが合わないため文字化け
これは、日本語で書かれた手紙を英語だと思って読もうとするようなものです。互いに「言語」が違うため、正しく理解できません。
文字コードとは?
文字コード(エンコード)とは、コンピュータが文字を数値として扱うための変換ルールです。
主な文字コード
- UTF-8:世界中の文字に対応。最も一般的で推奨される
- Shift_JIS(CP932):日本語Windowsのデフォルト
- CP950:中国語(繁体字)
- CP949:韓国語
なぜVSCodeとターミナルで違う文字コードになるのか?
VSCodeのデフォルト
- ファイルをUTF-8で保存
Windowsターミナルのデフォルト
- コマンドプロンプト:Shift_JIS(CP932)
- PowerShell:Shift_JIS(CP932)
Macターミナルのデフォルト
- UTF-8(そのため、Macでは文字化けが起こりにくい)
【Windows】基本的な解決方法
まずはWindowsでの最も一般的な解決方法から説明します。
解決法1:chcpコマンドで一時的に変更【即効性あり】
最も簡単で即効性のある方法です。
手順
- VSCodeでターミナルを開く(
Ctrl + @または「表示」→「ターミナル」) - 以下のコマンドを入力
chcp 65001
- Enterを押す
- 「Active code page: 65001」と表示されればOK
- プログラムを再実行
chcpとは?
Change Code Pageの略で、ターミナルの文字コードを変更するWindowsのコマンドです。
主なコードページ番号
- 65001:UTF-8
- 932:Shift_JIS(日本語Windows標準)
- 437:英語
デメリット:
この方法は一時的な対処です。ターミナルを閉じたり、VSCodeを再起動すると、元に戻ってしまいます。
解決法2:settings.jsonで自動的にUTF-8に設定【永続的】
起動時に自動的にchcp 65001を実行するよう設定します。
PowerShellの場合
手順
Ctrl + ,(Mac:Cmd + ,)で設定を開く- 右上の「設定を開く(JSON)」アイコンをクリック
- settings.jsonが開く
- 以下をコピーして追加
"terminal.integrated.profiles.windows": {
"PowerShell": {
"source": "PowerShell",
"icon": "terminal-powershell",
"args": ["-NoExit", "-Command", "chcp 65001"]
}
},
"terminal.integrated.defaultProfile.windows": "PowerShell"
コマンドプロンプトの場合
"terminal.integrated.profiles.windows": {
"Command Prompt": {
"path": "C:\\Windows\\System32\\cmd.exe",
"args": ["/k", "chcp", "65001"]
}
},
"terminal.integrated.defaultProfile.windows": "Command Prompt"
設定後の確認
- VSCodeを再起動
- 新しいターミナルを開く
- 自動的に「Active code page: 65001」と表示されればOK
注意点:
既存のターミナルには反映されません。新しいターミナルを開く必要があります。
解決法3:自動化プロファイルで設定
タスクランナーやデバッグ実行時の文字化けを防ぐには、自動化プロファイルも設定します。
settings.jsonに追加
"terminal.integrated.automationProfile.windows": {
"path": "cmd.exe",
"args": ["/k", "chcp", "65001"]
}
または PowerShellの場合
"terminal.integrated.automationProfile.windows": {
"path": "powershell.exe",
"args": ["-NoExit", "-Command", "chcp", "65001"]
}
【Mac・Linux】での解決方法
Mac・LinuxではデフォルトでUTF-8なので、文字化けが起こりにくいです。
もしMacで文字化けする場合
ターミナルの文字コードを確認
locale
LC_ALLやLANGがja_JP.UTF-8またはen_US.UTF-8になっているか確認します。
設定方法
.zshrc(または.bash_profile)に以下を追加
export LANG=ja_JP.UTF-8
export LC_ALL=ja_JP.UTF-8
フォントの問題の場合
日本語に対応したフォントが設定されていない可能性があります。
- settings.jsonを開く
- 以下を追加
"terminal.integrated.fontFamily": "Menlo, Monaco, 'Courier New', monospace"
プログラミング言語別の対処法
言語によって、追加の設定が必要な場合があります。
Python
Pythonは通常、UTF-8を使用するため、基本的な設定で解決します。
それでも文字化けする場合
ソースコードの先頭に以下を追加
# -*- coding: utf-8 -*-
標準出力の文字コードを指定
import sys
import io
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
print("こんにちは")
Java
Javaは文字化けが起こりやすい言語の一つです。
解決法1:コンパイル・実行時にUTF-8を指定
settings.jsonに追加
"terminal.integrated.env.windows": {
"JAVA_TOOL_OPTIONS": "-Dfile.encoding=UTF-8"
}
解決法2:コンパイラオプション
コンパイル時に-encoding UTF-8を指定
javac -encoding UTF-8 Hello.java
java Hello
解決法3:起動時にシステムプロパティを設定
java -Dfile.encoding=UTF-8 Hello
C/C++
C/C++では、コンパイル時の設定が重要です。
GCCの場合
ソースコードをUTF-8で保存し、実行時エンコードもUTF-8に
gcc -fexec-charset=UTF-8 hello.c -o hello.exe
実行
chcp 65001
./hello.exe
Windows環境での推奨手順
- ソースコードをUTF-8で保存
- settings.jsonでターミナルをUTF-8に設定(前述の方法)
- コンパイル時に
-fexec-charset=UTF-8を指定 - 実行
MinGWを使っている場合
tasks.jsonに以下を設定
{
"version": "2.0.0",
"tasks": [
{
"type": "shell",
"label": "gcc build active file",
"command": "gcc",
"args": [
"-fexec-charset=UTF-8",
"-g",
"${file}",
"-o",
"${fileDirname}\\${fileBasenameNoExtension}.exe"
]
}
]
}
Node.js / JavaScript
Node.jsは基本的にUTF-8を使用します。
それでも文字化けする場合
環境変数を設定
Windows(PowerShell)
$env:NODE_OPTIONS="--icu-data-dir=node_modules/full-icu"
Mac/Linux
export NODE_OPTIONS=--icu-data-dir=node_modules/full-icu
Kotlin
実行時にファイルエンコーディングを指定
java -Dfile.encoding=UTF-8 -jar Greeting.jar
settings.jsonで自動設定
"terminal.integrated.env.windows": {
"JAVA_TOOL_OPTIONS": "-Dfile.encoding=UTF-8"
}
ソースファイル自体の文字化け

ターミナルではなく、ソースファイルを開いたときに文字化けする場合の対処法です。
原因
ファイルがShift_JISやその他の文字コードで保存されているのに、VSCodeがUTF-8だと思って開いているため。
解決方法
一時的に正しく表示する
- VSCode下部のステータスバーにある「UTF-8」をクリック
- 「エンコード付きで再度開く」を選択
- 正しい文字コードを選択(例:「Japanese (Shift JIS)」)
ファイルをUTF-8で保存し直す
- 上記の方法でファイルを正しく開く
- 再度ステータスバーの文字コードをクリック
- 「エンコード付きで保存」を選択
- 「UTF-8」を選択
デフォルトの文字コードを変更
settings.jsonに以下を追加
"files.encoding": "utf8",
"files.autoGuessEncoding": true
files.encoding:新規ファイルのデフォルトエンコードfiles.autoGuessEncoding:ファイルを開く際に自動判別
フォントが原因の文字化け
文字コードは正しいのに、特定の文字(特殊記号、絵文字など)が「?」や「□」で表示される場合、フォントの問題です。
解決方法
日本語に対応したフォントに変更します。
Windows向けおすすめフォント
"terminal.integrated.fontFamily": "MS Gothic, 'Courier New', monospace"
または
"terminal.integrated.fontFamily": "MS Gothic, 'Consolas', monospace"
Mac向けおすすめフォント
"terminal.integrated.fontFamily": "Menlo, Monaco, 'Hiragino Sans', monospace"
おすすめ:Nerd Font
プログラミング向けフォントで、多くの記号や絵文字に対応
"terminal.integrated.fontFamily": "'CaskaydiaCove Nerd Font', 'MS Gothic', monospace"
よくあるエラーと対処法
エラー1:「chcp 65001」実行後も文字化けする
原因
- プログラムが既に起動中だった
- フォントが対応していない
- ソースコード自体の文字コードが異なる
対処法
- プログラムを再実行
- フォント設定を変更
- ソースファイルの文字コードを確認
エラー2:settings.jsonに設定したのに反映されない
原因
- JSONの構文エラー
- 既存のターミナルを使っている
対処法
- settings.jsonの構文を確認(カンマの位置、括弧の対応など)
- 既存のターミナルをすべて閉じる
- VSCodeを再起動
- 新しいターミナルを開く
エラー3:タスク実行時だけ文字化けする
原因
terminal.integrated.automationProfile.windowsが設定されていない
対処法
前述の「解決法3:自動化プロファイルで設定」を参照
エラー4:Gitのログが文字化けする
原因
GitのログはUTF-8だが、ターミナルがShift_JIS
対処法
前述の方法でターミナルをUTF-8に設定、またはGitの設定を変更
git config --global core.quotepath false
git config --global gui.encoding utf-8
git config --global i18n.logoutputencoding utf-8
エラー5:一部の文字だけ文字化けする
原因
フォントがその文字に対応していない
対処法
より多くの文字に対応したフォント(Nerd Font、Noto Sansなど)をインストールして設定
トラブルシューティング:それでも解決しない場合
手順1:現在の文字コードを確認
Windowsの場合
ターミナルで以下を実行
chcp
現在のコードページが表示されます。
手順2:ソースファイルの文字コードを確認
VSCode右下のステータスバーで確認できます。
手順3:環境変数を確認
Windowsの場合
$OutputEncoding
手順4:VSCodeの設定をリセット
settings.jsonを確認
関連する設定をすべてコメントアウトまたは削除し、デフォルトに戻してから再設定
手順5:拡張機能の確認
Code Runnerなどの拡張機能が原因の場合もあります。
- 拡張機能を一時的に無効化
- 問題が解決するか確認
- 拡張機能の設定を見直す
Code Runnerの設定例
settings.jsonに追加
"code-runner.runInTerminal": true,
"code-runner.executorMap": {
"python": "chcp 65001 && python -u"
}
予防策:今後文字化けを起こさないために
一度設定すれば、以降文字化けは起こらなくなります。
予防策1:常にUTF-8を使う
新規ファイルは必ずUTF-8で保存
settings.jsonに設定
"files.encoding": "utf8"
予防策2:ターミナルのデフォルトをUTF-8に
前述の「解決法2」の設定を必ず行う
予防策3:プロジェクトごとに.vscodeフォルダを作成
プロジェクトルートに.vscode/settings.jsonを作成し、そこに設定を記述すれば、そのプロジェクトでは常に同じ設定が適用されます。
予防策4:editorconfig を使う
.editorconfigファイルをプロジェクトルートに作成
root = true
[*]
charset = utf-8
end_of_line = lf
insert_final_newline = true
よくある質問
Q: UTF-8とShift_JIS、どちらを使うべきですか?
A: 現代のプログラミングではUTF-8を推奨します。理由:世界中の文字に対応、ほとんどのプログラミング言語・ツールのデフォルト、GitHubなどのWeb環境との親和性が高いなど。
Q: settings.jsonはどこにありますか?
A: Ctrl + ,で設定を開き、右上の「設定を開く(JSON)」アイコンをクリックします。または、ファイルパスは以下の通りです。
- Windows:
C:\Users\ユーザー名\AppData\Roaming\Code\User\settings.json - Mac:
~/Library/Application Support/Code/User/settings.json
Q: chcp 65001を実行すると、一部のコマンドが動かなくなります。
A: 一部の古いWindowsコマンド(typeコマンドなど)はUTF-8に対応していません。その場合、一時的にchcp 932でShift_JISに戻してから実行し、再度chcp 65001に戻してください。
Q: 複数のプロジェクトで異なる文字コード設定が必要な場合は?
A: プロジェクトごとに.vscode/settings.jsonを作成し、そこに設定を記述します。プロジェクト固有の設定は、ユーザー設定より優先されます。
Q: PowerShellとコマンドプロンプト、どちらを使うべきですか?
A: 特にこだわりがなければPowerShellをおすすめします。より多機能で、スクリプト実行にも適しています。ただし、どちらも文字化け対策は必要です。
Q: ターミナルをUTF-8に設定すると、既存の日本語ファイル名が文字化けします。
A: WindowsのファイルシステムはUTF-16を使用しているため、通常は問題ありません。もし文字化けする場合、そのファイル自体の名前エンコードに問題がある可能性があります。
Q: Mac使用者ですが、たまに文字化けします。
A: Macでの文字化けは稀ですが、もし起こる場合は、ターミナルのロケール設定を確認してください。localeコマンドで現在の設定を確認し、必要に応じて.zshrcでLANGとLC_ALLを設定します。
Q: Gitのコミットメッセージが文字化けします。
A: Gitの文字コード設定とターミナルの文字コードを合わせる必要があります。前述の「エラー4:Gitのログが文字化けする」を参照してください。
まとめ
VSCodeのターミナル文字化け問題の解決方法をまとめます。
最も効果的な解決方法(Windows)
- settings.jsonで自動設定
- PowerShellの場合:起動時に
chcp 65001を自動実行 - 一度設定すれば永続的に有効
- ソースコードをUTF-8で保存
- 新規ファイルは必ずUTF-8
- フォントを適切に設定
- 日本語対応フォントを使用
settings.jsonのテンプレート(Windows)
{
"terminal.integrated.profiles.windows": {
"PowerShell": {
"source": "PowerShell",
"icon": "terminal-powershell",
"args": ["-NoExit", "-Command", "chcp 65001"]
}
},
"terminal.integrated.defaultProfile.windows": "PowerShell",
"terminal.integrated.automationProfile.windows": {
"path": "powershell.exe",
"args": ["-NoExit", "-Command", "chcp", "65001"]
},
"terminal.integrated.fontFamily": "'MS Gothic', 'Consolas', monospace",
"files.encoding": "utf8",
"files.autoGuessEncoding": true
}
言語別の追加設定
| 言語 | 設定 |
|---|---|
| Java | JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8 |
| C/C++ | -fexec-charset=UTF-8 |
| Python | 通常は追加設定不要 |
| Node.js | 通常は追加設定不要 |
文字化けの診断フローチャート
- ターミナルの出力が文字化け?
- Yes → settings.jsonでchcp 65001を設定
- No → 2へ
- ソースファイルを開いたときに文字化け?
- Yes → エンコード付きで再度開く → UTF-8で保存し直す
- No → 3へ
- 特定の記号や絵文字だけ文字化け?
- Yes → フォント設定を変更
- No → 詳細診断が必要
今後の予防策
- ターミナルのデフォルトをUTF-8に設定
- 新規ファイルは常にUTF-8で保存
- プロジェクトごとに
.vscode/settings.jsonを作成 .editorconfigでチーム全体の文字コードを統一
VSCodeのターミナル文字化けは、文字コードの不一致が原因です。この記事の設定を行えば、今後は文字化けに悩まされることはなくなります。
快適なコーディング環境を手に入れて、開発に集中しましょう!

コメント