在批处理文件 (.bat) 中正确显示 UTF-8 中文需要两个关键设置:文件保存为UTF-8编码 和 设置控制台代码页。以下是完整解决方案:
最佳解决方案 (Windows 10/11)
@echo off
chcp 65001 > nul :: 设置控制台为UTF-8模式
cls :: 清屏确保刷新显示
:: ===== 以下是中文内容 =====
echo 中文测试 - 普通中文显示
echo 高级功能 ✅ √ ↑ ↓ ← → ✘
echo 特殊符号:¥ ° ℃ α β γ
echo 表情符号:😊 👍 💻
echo 混合排版:中文English混合排版
echo.
echo 当前日期:%date%
echo 当前时间:%time%
pause
关键设置说明
-
批处理文件必须保存为带 BOM 的 UTF-8:
- 在记事本中:
文件 > 另存为 > 编码选择 "UTF-8 带BOM"
- 在 VS Code 中:右下角切换为
UTF-8 with BOM
- 在记事本中:
-
字体设置要求:
:: 临时设置字体 (需要手动确认) reg add "HKCU\Console" /v "FaceName" /t REG_SZ /d "Consolas" /f > nul reg add "HKCU\Console" /v "FontFamily" /t REG_DWORD /d 0x36 /f > nul
完整优化方案
@echo off & title UTF-8中文批处理演示
chcp 65001 > nul
cls
:: 1. 检查是否支持UTF-8
ver | find "10." > nul && goto :win10_or_above
echo 注意:当前系统可能无法完美支持UTF-8显示
echo 建议升级到Windows 10/11
:win10_or_above
:: 2. 设置控制台
mode con: cols=100 lines=30
:: 3. 显示中文内容
echo/
echo ============== UTF-8中文测试 ==============
echo ■ 基本测试:简体中文、繁體中文、日本語
echo ■ 符号测试:✓ ✗ ⇨ ⇦ ★ ☆ ♪ ♬
echo ■ 混合排版:中英文混合 123 ABC @#$
echo ■ 日期时间:%date% %time:~0,8%
echo ■ 特殊字符:① ⓐ ⒜ Ⓐ ㊀ ㈠ ⑴
:: 4. 带样式的消息
echo/
call :ColorEcho 0E "成功消息:"
call :ColorEcho 0A "★ 操作已完成!√"
call :ColorEcho 0E "警告消息:"
call :ColorEcho 0E "⚠ 磁盘空间不足"
call :ColorEcho 0E "错误消息:"
call :ColorEcho 0C "✘ 文件未找到!"
:: 5. 结束
echo/
pause
exit
:: ===== 彩色输出函数 =====
:ColorEcho
echo off
<nul set /p ".=%DEL%" > "%~2"
findstr /v /a:%1 /R "^$" "%~2" nul
del "%~2" > nul 2>&1
goto :eof
进阶技巧
-
多行文本块:
( echo 第一行中文 echo 第二行中文 echo 第三行中文 ) > tmp.txt type tmp.txt del tmp.txt
-
中文路径支持:
set "中文文件夹=中文目录" md "%中文文件夹%" echo 已创建中文目录 > "%中文文件夹%\中文文件.txt"
-
终端自动重置:
:: 退出时恢复原始代码页 for /f "tokens=2 delims=: " %%C in ('chcp') do set original_cp=%%C chcp %original_cp% > nul
常见问题解决
问题1:显示方块或乱码
✅ 解决方法:确保使用带BOM的UTF-8保存文件,并设置控制台字体为 Consolas
或 MS Gothic
问题2:某些字符无法显示
✅ 解决方法:在控制台属性中启用 使用旧版控制台(需要重启)
问题3:彩色显示失效
✅ 解决方法:在控制台属性中启用 使用旧版控制台
最终建议
- Windows 10/11 首选方案
- 对于旧系统 (Windows 7/8),使用
chcp 936
(GBK编码) - 复杂显示需求建议使用 PowerShell 脚本
提示:在 Windows 11 22H2 及以上版本中,默认控制台已支持 UTF-8,只需确保文件以带BOM的UTF-8保存即可正确显示中文。