ホーム 芸能ニュース・ゴシップ PowerShell文字化けを一発解消!UTF-8設定の真相【2026】

PowerShell文字化けを一発解消!UTF-8設定の真相【2026】

安藤 澪 安藤 澪 • 更新: • 公開: • 読了約 11 分
目次

日常の開発作業やシステム管理の現場で、ターミナル上に突如として現れる無残な「???」や謎の記号の羅列。PowerShellで日本語テキストを扱った経験がある方なら、誰もが一度はこの文字化けの洗礼を受けたことがあるはずです。

特にWindows 11への移行やPowerShell 7の普及が進む現在においても、標準のWindows PowerShell(バージョン5.1)と最新環境との間には根深い文字コードの壁が存在します。業務の自動化スクリプトがエラーで止まるストレスを解消すべく、文字化けが起きる構造的要因から、今すぐ確実に直せる実践的な対処法までを徹底解剖します。

【なぜ起きる?】PowerShellで日本語が表示されない決定的な理由と仕組み

powershell文字化け

PowerShellを立ち上げて日本語テキストを表示したり、外部コマンドを実行したりした際、文字化けが発生する最大の原因はコンソール入出力・スクリプトファイル・実行エンジンの3箇所で文字コードの齟齬が起きている点にあります。

長年Windows環境で標準採用されてきた「Shift-JIS(コードページ932/CP932)」と、Webやモダンな開発でデファクトスタンダードとなっている「UTF-8」が混在することが混乱の引き金です。具体的には、以下の3つのレイヤーで不整合が生じます。

第1に、コンソールの表示レイヤーです。ターミナル画面が入力を待ち受けるコードページがShift-JISのまま、UTF-8形式の文字列を受け取ると、バイト列の解釈が狂って記号や意味不明な漢字へと化けてしまいます。

第2に、スクリプトファイルの保存形式です。PowerShellスクリプト(.ps1)をBOMなしUTF-8で保存しているにもかかわらず、Windows PowerShell 5.1で実行すると、Shift-JISとして読み込まれてしまい、ファイル内の日本語コメントや文字列リテラルが破損します。

第3に、パイプラインと外部コマンドの受け渡しです。PowerShell内部の文字列オブジェクトが外部プログラムへ渡される際、規定のエンコーディング変換が適切に行われないことで文字情報が抜け落ちるケースが頻発しています。

【即効性抜群】chcp 65001とUTF-8設定でコンソールの文字化けを直す手順

「今まさに画面に表示されている文字化けを直したい」という緊急時には、コンソールのコードページを即座にUTF-8へ切り替えるコマンドが有効です。PowerShellのプロンプト上で以下のコマンドを実行してください。

chcp 65001

このコマンドを実行すると、現在のアクティブなコードページが「65001(UTF-8)」に変更されます。これに加えて、PowerShellプロセス内の入出力エンコーディングも確実にUTF-8へ同期させるため、以下の2行を合わせて実行するのが鉄則です。

[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
$OutputEncoding = [System.Text.Encoding]::UTF8

これにより、コンソール自体の表示エンコードと、PowerShellが外部コマンドとやり取りする際の標準エンコードが揃い、curlやgitなどのCLIツールから返される日本語レスポンスも正確に描画されるようになります。

【永続化対策】profile.ps1の設定方法と文字コード一括変更の完全手順

「chcp 65001」はその場限りのセッション設定であり、ターミナルを閉じると次回の起動時には元の状態に戻ってしまいます。毎回手動で打ち込む手間をなくすには、PowerShellの起動構成ファイルであるprofile.ps1へ設定を記述するのが最もスマートな解決策です。

まずは設定ファイルが存在するか確認し、なければ新規作成します。ターミナルで以下のコマンドを実行してください。

if (!(Test-Path $PROFILE)) { New-Item -Type File -Path $PROFILE -Force }
notepad $PROFILE

メモ帳が開いたら、以下のコードをそのまま貼り付けて保存します。

[Console]::InputEncoding = [System.Text.Encoding]::UTF8
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
$OutputEncoding = [System.Text.Encoding]::UTF8
chcp 65001 > $null

末尾の「> $null」は、起動時に「Active code page: 65001」というメッセージが毎回画面に出力されるのを防ぐための工夫です。この設定を記述しておくことで、新しいタブやウィンドウを開くたびに自動でUTF-8環境が構築され、文字化けに悩まされる日常から完全に解放されます。

【スクリプト・ファイル操作】出力リダイレクトやShift-JIS変換で失敗しないコツ

ターミナル上の表示は正常でも、実行結果をテキストファイルへ出力(リダイレクト)した途端に文字化けする現象は、初心者が最も陥りやすい落とし穴です。PowerShellで標準のリダイレクト演算子「>」や「>>」を使用すると、意図しない文字コード(UTF-16LEなど)で書き出されてしまうケースが多いためです。

ファイルへの書き出し処理では、リダイレクトではなくSet-ContentやOut-Fileコマンドレットを使用し、明示的に文字コードを指定する運用を徹底しましょう。

【UTF-8で保存する場合】
Get-Process | Out-File -FilePath "process_list.txt" -Encoding utf8

【レガシーな業務システム向けにShift-JISで出力・変換する場合】
社内システムや古いExcelとの連携でShift-JISが必要な場合は、文字コードを「default」または明示的なエンコード指定で変換します。
Get-Content "input_utf8.txt" -Encoding utf8 | Set-Content "output_sjis.txt" -Encoding default

Windows PowerShell 5.1環境において「-Encoding default」はシステムのANSI(日本語環境ではCP932/Shift-JIS)を指すため、文字コードの相互変換がスムーズに行えます。

【環境比較】Windows Terminal・PowerShell 7・コマンドプロンプトの文字コードの違い

作業環境ごとの特性を把握しておくことも、トラブルを未然に防ぐ上で欠かせません。標準の「コマンドプロンプト」、従来の「Windows PowerShell 5.1」、そしてモダンな「PowerShell 7系」では、内部アーキテクチャが大きく異なります。

コマンドプロンプト(cmd.exe)とWindows PowerShell 5.1は、過去の互換性を重視して作られているため、既定値がShift-JIS(CP932)に縛られています。一方、オープンソースとして刷新されたPowerShell 7(PSCore)は、内部エンコーディングが最初からBOMなしUTF-8を標準として設計されています。

加えて、描画フロントエンドとしてマイクロソフトが推奨する「Windows Terminal」を導入することで、フォントのレンダリングエンジンが強化され、絵文字や特殊文字、日本語フォントのフォールバック処理が格段に安定します。文字化けを根底からなくしたい場合、「Windows Terminal + PowerShell 7」の組み合わせへの刷新が最も確実で未来志向の選択肢となります。

【PowerShellの文字化け】に関するよくある質問(FAQ)

Q1:PowerShellスクリプト(.ps1)を実行すると日本語のメッセージだけが化けてしまいます。どうすれば直りますか?
A1:スクリプトファイルの保存形式を見直してください。VS Codeなどのエディタでファイルを保存する際、「UTF-8 with BOM(BOM付きUTF-8)」を指定して保存すると、Windows PowerShell 5.1とPowerShell 7のどちらでも正常に日本語が認識されます。

Q2:chcp 65001を実行したら、一部の日本語フォントが崩れて表示されなくなりました。
A2:コンソールで使用されているフォントが日本語UTF-8のグリフに対応していない可能性があります。ターミナルのプロパティ(またはWindows Terminalの設定)を開き、フォントを「MS ゴシック」や「BIZ UDゴシック」「Cascadia Code / Cascadia Mono」などの日本語対応フォントに変更してください。

Q3:PowerShell 7にアップデートすれば文字化けは完全に起きなくなりますか?
A3:PowerShell 7単体での文字コードの扱いは大幅に改善されますが、Windows標準の外部コマンド(netstatやipconfigなど)がShift-JISで結果を返す場合、パイプライン処理で文字化けすることがあります。その場合も「[Console]::OutputEncoding」を適切に同期させる設定が有効です。

PowerShellにおける文字化け問題は、決して難解なバグではなく、歴史的経緯から生まれた文字コードの不一致が引き起こす必然的な現象です。

「chcp 65001」によるクイックな対処法を把握しつつ、profile.ps1を活用したUTF-8環境の自動化、そしてスクリプト保存時のBOM管理を徹底すれば、予期せぬ表示崩れに作業を中断されることはなくなります。ご自身の作業環境を今すぐ見直し、ストレスフリーなCLI環境を整えてみてください。

同じカテゴリの記事

安藤 澪
コンテンツディレクター 安藤 澪
プロフィールを見る →

観光情報は自治体と施設の公式資料を一次情報とし、季節や営業状況の変化は更新日と一緒に明示します。

おすすめの関連記事