解決bat批處理輸出亂碼的問題

亂碼原因

Windows的cmd.exe默認編碼格式為ANSI
簡體中文版的Windows, 其ANSI對應微軟Codepage為cp936
大致等同於GBK編碼

在這裡插入圖片描述

如果你的bat文件是UTF-8編碼的, 或者是是其他Codepage下創建的, 比如
Windows日語版下創建的bat文件, 保存為ANSI編碼時對應cp932, 即Shift-JIS編碼
Windows繁體中文版下創建的bat文件, 保存為ANSI編碼時對應cp950, 即Big5編碼

當bat文件編碼與當前cmd環境不一致時, 雙擊執行時就會亂碼

在這裡插入圖片描述

解決方法

方法1

將bat文件轉換成你當前操作系統的編碼
比如將UTF-8格式bat文件, 右鍵編輯, 然後選文件另存, 指定為ANSI編碼, 保存

在這裡插入圖片描述

然後再執行就正常瞭

在這裡插入圖片描述

方法2

假如你的bat文檔是日文格式的或其他格式, 首先需要將bat文件的編碼轉換到UTF-8格式

會python的話可以參考我的另一篇博客
《記錄一些最近用過的編碼轉換》
https://www.jb51.net/article/171899.htm
復制出一些字符串或者是字節集, 跑碼識別一下看是什麼的編碼的

然後用文本工具或是python代碼實現轉換

def decoding(path,fromcode,tocode):
	# 以bytes形式讀取bat內容
    with open(path,'rb') as f:
        b = f.read()
        print(b)
    # 解碼另存為'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"=-

到此這篇關於解決bat批處理輸出亂碼的問題的文章就介紹到這瞭,更多相關bat批處理輸出亂碼內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!