Windows解決cmd/dos窗口中文亂碼問題
CMD/DOS窗口出現(xiàn)中文亂碼及解決方案(以下演示是在Win10系統(tǒng)),本文提供了多種解決方案,總有一款適合你。
一、問題描述
有時(shí)候我們在cmd窗口執(zhí)行命令或程序時(shí),會看到cmd窗口出現(xiàn)中文亂碼的問題

這主要是因?yàn)閏md窗口默認(rèn)使用的是GBK編碼,如果命令或程序輸出的內(nèi)容編碼與cmd窗口使用的編碼不一致,就會出現(xiàn)中文亂碼的問題
二、解決方案
解決方案主要有兩大類:
1.更改DOS窗口代碼頁;
2.更改批處理文件編碼;
1. 更改DOS窗口代碼頁
如何查看當(dāng)前窗口的代碼頁?
方式1:在dos窗口頂部右鍵菜單 > 屬性 > 選項(xiàng) tab頁 > 當(dāng)前代碼頁
方式2:在dos窗口輸入chcp命令查看
C:\Users\cyinl>chcp /? 顯示或設(shè)置活動代碼頁編號。 CHCP [nnn] nnn 指定代碼頁編號。 不帶參數(shù)鍵入 CHCP 以顯示活動代碼頁編號。
(部分)代碼頁編號如下:
| 代碼頁 | 描述 |
|---|---|
| 65001 | UTF-8 編碼 |
| 950 | 繁體中文 |
| 936 | 簡體中文 GBK (默認(rèn)) |
| 437 | MS-DOS 美國英語 |
如何更改dos窗口代碼頁?
更改dos窗口代碼頁又分為多種方式,每種方式各有優(yōu)缺點(diǎn)。
方式1:更改dos窗口代碼頁(臨時(shí)有效)
在dos窗口 執(zhí)行chcp 65001更改dos窗口代碼頁
優(yōu)點(diǎn):切換代碼頁靈活,可以將chcp命令放到bat批處理文件內(nèi),臨時(shí)更改控制臺窗口的編碼格式
缺點(diǎn):僅對當(dāng)前窗口生效的,其他窗口或新打開的dos窗口仍為默認(rèn)的936
C:\Users\cyinl>chcp 65001 Active code page: 65001 C:\Users\cyinl>
驗(yàn)證,執(zhí)行curl www.baidu.com,可以看到中文亂碼問題解決了

方式2:修改注冊表CodePage項(xiàng)(永久有效)
1)win+r 打開運(yùn)行器,輸入regedit 回車,打開注冊表;
2)在路徑計(jì)算機(jī)\HKEY_CURRENT_USER\Console\%SystemRoot%_System32_cmd.exe 找到CodePage 項(xiàng)(沒有的話新建一個,DWORD類型);
3)修改CodePage的值為:十進(jìn)制65001 (對應(yīng)十六進(jìn)制:fde9)保存即可
優(yōu)點(diǎn):一勞永逸
缺點(diǎn):通過.lnk 快捷方式打開的dos窗口,默認(rèn)仍是 936(就很奇怪)

對通過Win+R 打開運(yùn)行,輸入cmd 回車,打開的cmd窗口,進(jìn)行驗(yàn)證

對通過文件資源管理器,地址欄輸入cmd 回車,打開的cmd窗口,進(jìn)行驗(yàn)證

對雙擊C:\WINDOWS\System32\cmd.exe,打開的cmd窗口,進(jìn)行驗(yàn)證

對開始菜單>Windows 系統(tǒng)>命令提示符或搜索>輸入cmd>命令提示符 打開的cmd窗口,進(jìn)行驗(yàn)證


對執(zhí)行bat批處理文件打開的cmd窗口,進(jìn)行驗(yàn)證
test.bat 測試文件
@echo on chcp pause
雙擊test.bat批處理文件

注:開始菜單或搜索欄里打開的dos窗口,實(shí)際上是通過 xxx.lnk 快捷方式打開的
方式3:修改 .lnk 快捷方式的文件屬性(永久有效)
1)找到?C:\Windows\System32\cmd.exe 命令程序;
2)右鍵cmd.exe> 發(fā)送到>桌面快捷方式,創(chuàng)建一個cmd的快捷方式 cmd.exe - 快捷方式.lnk
3)桌面找到cmd的快捷圖標(biāo),右鍵 > 屬性 > 快捷方式 > 目標(biāo) 后邊增加 /K "chcp 65001"(注意跟 cmd.exe 之間有個空格),然后點(diǎn)擊應(yīng)用即可
優(yōu)點(diǎn):對 xxx.lnk 打開的dos窗口有效,可以彌補(bǔ)【方式2】注冊表的CodePage 注冊項(xiàng)對 .lnk 快捷方式打開的dos窗口不生效的不足
缺點(diǎn):僅對修改的快捷方式的打開的dos窗口有效,如果有多個.lnk 快捷方式,需要分別進(jìn)行修改

回到桌面雙擊cmd.exe - 快捷方式.lnk ,打開dos窗口,驗(yàn)證效果如下:

從 開始菜單>Windows 系統(tǒng)>命令提示符或搜索>輸入cmd>命令提示符 打開的dos窗口,進(jìn)行驗(yàn)證,可以看到未生效

想要開始菜單或搜索里打開的dos窗口也生效,需要修改對應(yīng)的 .lnk 里的屬性
操作步驟:
1)開始菜單或搜索里找到命令提示符,右鍵 > 打開文件位置
(我這里是C:\Users\cyinl\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\System Tools)
2)找到命令提示符快捷方式,右鍵>屬性>快捷方式>目標(biāo) 后邊增加 /K "chcp 65001",點(diǎn)擊應(yīng)用即可

從開始菜單或搜索打開dos窗口,進(jìn)行驗(yàn)證,可以看到已生效

方式4:修改注冊表增加AutoRun項(xiàng)(永久有效)
1)win+r 打開運(yùn)行器,輸入regedit 回車,打開注冊表;
2)在路徑計(jì)算機(jī)\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor ,右鍵 > 新建 > 字符串值,重命名為AutoRun 項(xiàng);
3)雙擊AutoRun,編輯數(shù)值數(shù)據(jù)為:chcp 937(注意這里我為了區(qū)分其他方式更改的效果,設(shè)置為了937)
優(yōu)點(diǎn):一勞永逸,且對所有途徑打開的cmd都生效
缺點(diǎn):命令行啟動后首行顯示的不再是Windows版權(quán)信息,而是"Active code page: xxx"(好像也不算什么缺點(diǎn));另外就是對于快捷方式來說【屬性】配置后執(zhí)行于【AutoRun】的配置,后執(zhí)行的會覆蓋先執(zhí)行的(這點(diǎn)應(yīng)該難理解吧)

對通過Win+R 運(yùn)行cmd打開的dos窗口進(jìn)行驗(yàn)證如下,可以看到 AutoRun配置已生效。
注意:【方式2】修改的注冊表CodePage項(xiàng),我并沒有去掉,說明 AutoRun 配置覆蓋掉了 CodePage 配置

雙擊桌面的cmd.exe - 快捷方式.lnk 圖標(biāo),驗(yàn)證效果如下,可以看到注冊表里的AutoRun配置已生效,但是緊接著被其他配置給覆蓋了,最終代碼頁顯示為 65001
注意:目前 cmd.exe - 快捷方式.lnk 有3處配置,結(jié)合上邊的 AutoRun 配置會覆蓋 CodePage,可以推測出,這里的 65001 是 快捷方式的【屬性】配置起的作用

把cmd.exe - 快捷方式.lnk屬性里的 /K "chcp 65001" 去掉,然后重新打開dos窗口,驗(yàn)證上邊的推測,從結(jié)果看 AutoRun 配置最終生效了(嚴(yán)格來講是都生效了,只是后執(zhí)行的會覆蓋先執(zhí)行的)

對開始菜單>Windows 系統(tǒng)>命令提示符或搜索>輸入cmd>命令提示符 打開的dos窗口,進(jìn)行驗(yàn)證。
注意:對于【開始菜單】或【搜索】打開的命令提示符,共有【方式2】【方式3】【方式4】3個配置,結(jié)合驗(yàn)證結(jié)果可以看出快捷方式【屬性】配置最終生效了

對執(zhí)行bat批處理文件test,bat,打開的dos窗口,進(jìn)行驗(yàn)證。
注意:對于批處理文件,此時(shí)只有【方式2】【方式4】兩處配置,可以看出【方式4】的AutoRun配置最終生效了

最后結(jié)論:
配置優(yōu)先級 【快捷方式的屬性】>【注冊表的AutoRun】>【注冊表的CodePage】,即 高優(yōu)先級配置會覆蓋低優(yōu)先級配置(嚴(yán)格來講這里說的優(yōu)先級高,只是因?yàn)樗髨?zhí)行,把先執(zhí)行的效果給覆蓋掉了)
2. 更改批處理文件編碼
通過更改批處理文件的編碼方式,使文件的編碼與DOS窗口的代碼頁對應(yīng)
方式1:更改批處理文件編碼方式
使用記事本,新建test2.bat批處理文件,內(nèi)容如下,另存為,編碼選擇:ANSI
@echo on echo 中文 pause
雙擊test2.bat批處理文件,執(zhí)行效果如下:

是亂碼沒錯,這是因?yàn)樵谇懊嫜菔具^程中更改的AutoRun配置將dos窗口代碼頁設(shè)置為了437
到注冊表里把AutoRun項(xiàng)刪掉(這里就不演示怎么刪了),然后再雙擊運(yùn)行test2.bat

還是亂碼,那就對了,聰明如你應(yīng)該能想到,注冊表里還有個CodePage 配置,配置的是:十進(jìn)制 65001(對應(yīng) UTF-8),修改為 十進(jìn)制 936(對應(yīng) ANSI/GBK)或刪掉它?。ú灰獑栁以趺床僮??我不會告訴你的?。?/p>
我這里改為936(我注冊表里最初配置的就是936,這里相當(dāng)于復(fù)原),再雙擊運(yùn)行test2.bat,中文亂碼問題解決了

當(dāng)然,你也可以在批處理文件里,在中文輸出命令之前,使用chcp 更改dos窗口的代碼頁,使其與批處理文件的編碼對應(yīng)
使用記事本,新建test3.bat批處理文件,內(nèi)容如下,另存為,編碼選擇:ANSI
@echo on chcp 936 echo 中文 pause
雙擊運(yùn)行test3.bat,進(jìn)行驗(yàn)證

如果批處理文件保存時(shí),編碼選擇:UTF-8,那么需要更改dos窗口的代碼頁為:65001,這里就不演示了。
總之就是保持批處理文件本身的編碼方式與DOS窗口代碼頁對應(yīng),這樣應(yīng)該就不會出現(xiàn)亂碼問題了
最后:
如果還有亂碼問題,可以嘗試在DOS窗口的屬性里,改下字體試試。

到此這篇關(guān)于Windows解決cmd/dos窗口中文亂碼問題的文章就介紹到這了,更多相關(guān)cmd/dos窗口中文亂碼內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Windows下通過bat獲取網(wǎng)絡(luò)連線實(shí)際名稱,加強(qiáng)IP類設(shè)置腳本的兼容性
在之前的工作中,由于分區(qū)域管理,TCP設(shè)置有差異,所以編寫過很多關(guān)于IP切換的腳本,作為大批量電腦維護(hù)的腳本,最重要的就是兼容性,可不能就測試的那幾臺電腦通過了,然后發(fā)布給同事使用的時(shí)候,出現(xiàn)各種狀況2016-02-02
window設(shè)置任務(wù)計(jì)劃定時(shí)執(zhí)行 git 更新(git pull)并隱藏運(yùn)行cmd
這篇文章主要介紹了window設(shè)置任務(wù)計(jì)劃定時(shí)執(zhí)行 git 更新(git pull)并隱藏運(yùn)行cmd,需要的朋友可以參考下2020-09-09
用bat和 reg實(shí)現(xiàn)關(guān)閉局域網(wǎng)共享
這篇文章主要是為大家介紹一下通過reg關(guān)閉局域網(wǎng)共享的代碼,其實(shí)這個cmd命令就是一個注冊表的導(dǎo)入功能,直接雙擊運(yùn)行reg文件也是可以的2007-10-10
用批處理程序修改 計(jì)算機(jī)名 工作組 計(jì)算機(jī)描述的代碼
用批處理程序修改 計(jì)算機(jī)名 工作組 計(jì)算機(jī)描述的代碼,其實(shí)計(jì)算機(jī)名是保存在注冊表里面的,我們可以通過直接修改注冊表,達(dá)到修改的目的2013-03-03

