1. ホーム
  2. スクリプト・コラム
  3. DOS/BAT(ドス・バット

batの一括出力でコードが乱れる問題の解決

2022-01-01 01:45:47

コードの文字化けの原因

Windows の cmd.exe のデフォルトのエンコード形式は ANSI です。
中国語(簡体字)Windowsの場合、Microsoft CodepageのANSI相当はcp936です。
GBKエンコーディングとほぼ同等

batファイルがUTF-8でエンコードされている場合、または他のコードページで作成されている場合、例えば以下のようになります。
日本語版Windowsで作成したbatファイルをANSIエンコーディング、すなわちShift-JISエンコーディングで保存した場合、cp932に対応する。
Windows繁体字中国語版で作成したbatファイルをANSIエンコーディングで保存した場合、cp950、すなわちBig5エンコーディングに対応します。

batファイルのエンコーディングが現在のcmd環境に合わない場合、ダブルクリックで実行すると文字化けします

解決方法

方法1

batファイルを現在のOSのエンコーディングに変換します。
例えば、UTF-8のbatファイルを、右クリックで編集し、名前を付けて保存を選択し、次のように指定します。 ANSI encoding を保存します。

その後、もう一度実行すると、うまくいきます

方法2

batファイルが日本語または他の形式の場合、まずbatファイルのエンコードをUTF-8に変換する必要があります。

Pythonをご存知の方は、私の他のブログを参照してください。
最近使用したコード変換の文書化
https://www.jb51.net/article/171899.htm
いくつかの文字列またはバイトセットをコピーし、コードを実行してエンコーディングを確認します。

その後、テキストツールやpythonのコードを使って変換を行います。

def decoding(path,fromcode,tocode):
	# Read the contents of the bat as bytes
    with open(path,'rb') as f:
        b = f.read()
        print(b)
    # Decode and save as 'temp.bat'
    with open('temp.bat', 'w', encoding=tocode) as f:
        s = b.decode(fromcode,errors='ignore')
        f.write(s)

decoding('dir.bat','gbk','utf-8')


UTF-8 形式の bat ファイルを取得する

次にcmdもutf-8にする必要があります。
として保存します。 cmd_UTF-8.reg そして、次のように実行します。

Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Console\%SystemRoot%_system32_cmd.exe]
"CodePage"=dword:0000fde9

この時点で、cmd環境もUTF-8になります。

そして、この時点でもう一度batファイルを実行すれば、コードが乱れることはないでしょう

その後のcmdをデフォルトに戻すのも簡単です。
次のように保存します。 cmd_ANSI.reg そして、次のように実行するだけです。

Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Console\%SystemRoot%_system32_cmd.exe]
"CodePage"=-

この記事は、バットバッチ出力文字化けコードの問題を解決するために導入され、より関連するバットバッチ出力文字化けコードの内容は、スクリプトハウスの以前の記事を検索してくださいまたは次の関連記事を閲覧し続けるあなたは将来的に多くのスクリプトハウスをサポートすることを願って!.