batの一括出力でコードが乱れる問題の解決
コードの文字化けの原因
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"=-
この記事は、バットバッチ出力文字化けコードの問題を解決するために導入され、より関連するバットバッチ出力文字化けコードの内容は、スクリプトハウスの以前の記事を検索してくださいまたは次の関連記事を閲覧し続けるあなたは将来的に多くのスクリプトハウスをサポートすることを願って!.
関連
-
cmdデスクトップショートカット一括作成ツール
-
一括ASCII文字比較サイズ実数表
-
ループ使用のためのWindows batスクリプトを解説
-
cmdでファイル名をフィルタリングする2つの方法
-
bat は set /a 計算後の日付と時刻をインターセプトします、08 と 09 は不正な 8 進数として扱われます
-
Windowsのcmdコマンドラインの入出力リダイレクト問題
-
DOSバッチ処理では、カレントディレクトリのソリューションとしてUNCパスをサポートしていません。
-
Windows Server 2008 R2のリモートポート3389を変更するためのバッチコード
-
バッチ式再帰計算の実装コード N!
-
DOS高度活用バッチ処理チュートリアル 第6章 ifコマンドの解説
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン