[ホーム] - [Windows 11 FAQ 一覧] - [コマンドプロンプトで文字化けする場合の対処 | Windows]



作成日:2022/02/07
更新日:2022/02/07
対象:Windows 11

コマンドプロンプトで文字化けする場合の対処 | Windows




【目次】


エラーの内容


Windows 環境のコマンドプロンプトで文字化けしてしまう場合の対処に関して記載します。

Windows コマンドプロンプトで文字化けする場合の対処



文字コード


コマンドプロンプトには文字コードの設定があります。"文字を表示するためにどのコードを使用するか?"ということです。

デフォルトでは 932 (Shift jis)が使用されています。
例えばもし表示するテキストファイルがUTF-8で作成されている場合はこれを type などで表示させると文字化けするということです。

切り替えるには以下コマンドを使用します。

Shift-JIS に切り替える


C:\>chcp 932
現在のコード ページ: 932



UTF-8に切り替える

C:\temp>chcp 65001
Active code page: 65001



もし UTF-8 は 65001 に変更してから表示させれば文字化けしません。

一方でShift-JIS (メモ帳の場合は ansi と表示される)の場合は 932 に変更してから表示させると文字化けしません。

文字コードを変更しても文字化けする場合


上記の文字コードを変更しても文字化けする場合、UTF-8に対応していないWindows コマンドで出力したケースなどが考えられます。

例えばファイルを比較する Windows 標準の fc.exe はデフォルトはShift-JISに対応しており、UTF-8で作成されたファイルを比較すると文字化けするようです。
(注意: /u オプションでUTF-8 に対応できるようですが、私の環境では正しく動作しませんでした。)

fc の書式は次の通りです。

FC [/A] [/C] [/L] [/LBn] [/N] [/OFF[LINE]] [/T] [/U] [/W] [/nnnn]
[ドライブ1:][パス1]ファイル名1 [ドライブ2:][パス2]ファイル名2
FC /B [ドライブ1:][パス1]ファイル名1 [ドライブ2:][パス2]ファイル名2

/A 相違する各部分の 1 行目と最後の行だけを表示します。
/B バイナリの比較を実行します。
/C 英字の大文字と小文字を区別しません。
/L ファイルを ASCII テキストとして比較します。
/LBn 連続する最大不一致行を指定行数に設定します。
/N ASCII の比較で行番号を表示します。
/OFF[LINE] オフライン属性が設定されたファイルをスキップしません。
/T タブをスペースに変換しません。
/U Unicode テキスト ファイルとしてファイルを比較します。
/W 連続した空白 (タブとスペース) を 1 つのスペースに圧縮して比較
します。
/nnnn 不一致発見後に確認する、一致すべき連続行数を指定します。

[ドライブ1:][パス1]ファイル名1
比較する最初のファイルまたはファイル セットを指定します。
[ドライブ2:][パス2]ファイル名2
比較する 2 番目のファイルまたはファイル セットを指定します。



Powershell で比較する


UTF-8のファイルはUTF-8に対応した Windows 標準のシェルである Powershell で処理するとよいでしょう。

それぞれ UTF-8で作成されたa.txt というファイルと b.txt というファイルを比較するには以下のPowershell を実行します。


PS C:\temp> $a=Get-Content -Encoding UTF8 "a.txt"
PS C:\temp> $b=Get-Content -Encoding UTF8 "b.txt"
PS C:\temp> Compare-Object $a $b

InputObject SideIndicator
----------- -------------
差分はここにUTF-8で表示されます。 =>



以上で分かる通り、Powershell は UTF-8をとても使いやすく設計されています。無理にWindowsコマンドやバッチファイルで UTF-8 を処理するのではなく、Powershell を使用するとよいと思います。

Powershell v6 の Get-Content の -Encoding で指定可能な文字コードは次の通りです。

ascii: ASCII (7 ビット) 文字セットのエンコーディング
bigendianunicode: ビッグエンディアンのバイト順を使用して UTF-16 形式でエンコード
oem: MS-DOS およびコンソールプログラムの既定のエンコード
unicode: リトルエンディアンのバイト順を使用して UTF-16 形式でエンコード
utf7: UTF-7 形式でエンコード
utf8: UTF-8 形式 (BOM なし) でエンコード
utf8BOM: バイト順マーク (BOM) を使用して UTF-8 形式でエンコード
utf8NoBOM: バイトオーダーマーク (BOM) を使用せずに UTF-8 形式でエンコード
utf32:32 UTF-8 形式でエンコード





Shift-JIS に変換してから比較する


Powershell を使用しない場合、比較対処のファイルを一度 Shift-JIS に変換してから比較する方法もあります。
例えばメモ帳で対象ファイルを開いて、ファイル形式をUTF-8 から Shift-JIS(メモ帳ではANSI と表示される)に変換してから比較する方法があります。






(ご注意) 本サイト内の内容を使用して発生したいかなる時間的損害、金銭的損害あるいはいかなる損害に対して、いかなる人物も一切の責任を負いません。あくまでも個人の判断で使用してください。 本ページは独自に調査をしたアンオフィシャル(非公式)な内容です。内容に誤りがある可能性や仕様変更により内容が不正確になる可能性があります。 本サイト内掲載されている情報は、著作権法により保護されています。いかなる場合でも権利者の許可なくコピー、配布することはできません。 このページはリンクフリーです。(このページへの直接リンクも可能です。)


Copyright(c) TOOLJP.COM 1999-2024

[Windows 11 FAQ 一覧に戻る]