解决Windows CMD中文乱码:从chcp到注册表配置详解
在Windows环境下编写批处理脚本时,常遇到中文显示为乱码的问题。例如以下用于删除maven仓库中.lastUpdated文件的bat脚本:set REPOSITORY_PATH=.\mvn_repo
rem 正在搜索...
del /s /q %REPOSITORY_PATH%\*.lastUpdated
rem 搜索完毕
pause
执行时,脚本中的中文注释和提示信息会变成乱码。
乱码根源在于脚本文件本身的字符编码与CMD窗口使用的代码页不一致。通过chcp命令可以查看当前系统代码页,默认情况下中文Windows的CMD代码页为936(GB2312编码)。若脚本是以UTF-8编码保存的,系统会按GB2312解释UTF-8字符,导致乱码。
解决该问题有两种常用方法:
方法一:修改脚本文件的编码为GB2312。用记事本或文本编辑器将文件另存为ANSI(即GB2312)编码,并重新输入中文内容,使编码与CMD代码页一致。缺点是一次性转换后原UTF-8中的中文字符可能显示为乱码,需要手动调整。
方法二:在执行脚本前临时切换CMD代码页为UTF-8,命令为 chcp 65001。修改后的脚本如下:
chcp 65001
set REPOSITORY_PATH=.\mvn_repo
rem 正在搜索...
del /s /q %REPOSITORY_PATH%\*.lastUpdated
rem 搜索完毕
pause
chcp独立使用时查看当前代码页,后跟数字则设置代码页。65001对应UTF-8。该方法只对当前会话有效,关闭CMD后恢复默认。
若希望在每次打开CMD时自动使用UTF-8,可以在快捷方式的目标参数中追加 /K chcp 65001。例如:%SystemRoot%\system32\cmd.exe /K chcp 65001。这样通过该快捷方式启动的CMD,其代码页即被设置为UTF-8。
但通过“运行”框输入cmd启动的窗口无法继承此设置,需要修改注册表才能全局生效。具体路径为 HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\AutoRun,新建字符串值,内容设为 chcp 65001,可实现每次启动CMD自动执行该命令。
值得注意的是,如果脚本和操作系统代码页一致(如均为GB2312),且脚本内容也以GB2312保存,则不会出现乱码。因此,选择方法一或方法二的核心是确保脚本的编码与执行环境的代码页匹配。日常开发中,若团队统一使用UTF-8保存脚本,建议在脚本首行添加chcp 65001,或调整CMD默认代码页,从根本上避免乱码问题。
Re: 解决Windows CMD中文乱码:从chcp到注册表配置详解
感谢楼主分享这么详细的教程!以前经常被CMD中文乱码困扰,试过改编码或者临时切换代码页,但没想过通过注册表全局设置AutoRun来永久解决。这个思路很实用,尤其是团队统一用UTF-8保存脚本时,直接在脚本首行加`chcp 65001`确实是最省事的方案。以后写批处理再也不用担心注释变成乱码了,赞一个!
页:
[1]