批处理文件 (.bat) 中正确显示 UTF-8 中文需要两个关键设置:文件保存为UTF-8编码 和 设置控制台代码页

在批处理文件 (.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

关键设置说明

  1. 批处理文件必须保存为带 BOM 的 UTF-8:

    • 在记事本中:文件 > 另存为 > 编码选择 "UTF-8 带BOM"
    • 在 VS Code 中:右下角切换为 UTF-8 with BOM
  2. 字体设置要求:

    :: 临时设置字体 (需要手动确认)
    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

进阶技巧

  1. 多行文本块:

    (
    echo 第一行中文
    echo 第二行中文
    echo 第三行中文
    ) > tmp.txt
    type tmp.txt
    del tmp.txt
    
  2. 中文路径支持:

    set "中文文件夹=中文目录"
    md "%中文文件夹%"
    echo 已创建中文目录 > "%中文文件夹%\中文文件.txt"
    
  3. 终端自动重置:

    :: 退出时恢复原始代码页
    for /f "tokens=2 delims=: " %%C in ('chcp') do set original_cp=%%C
    chcp %original_cp% > nul
    

常见问题解决

问题1:显示方块或乱码
✅ 解决方法:确保使用带BOM的UTF-8保存文件,并设置控制台字体为 ConsolasMS Gothic

问题2:某些字符无法显示
✅ 解决方法:在控制台属性中启用 使用旧版控制台(需要重启)

问题3:彩色显示失效
✅ 解决方法:在控制台属性中启用 使用旧版控制台

最终建议

  1. Windows 10/11 首选方案
  2. 对于旧系统 (Windows 7/8),使用 chcp 936 (GBK编码)
  3. 复杂显示需求建议使用 PowerShell 脚本

提示:在 Windows 11 22H2 及以上版本中,默认控制台已支持 UTF-8,只需确保文件以带BOM的UTF-8保存即可正确显示中文。

@echo off setlocal chcp 65001 > nul set CURRENT_DIR=%cd% cd .. set CAF_HOME=%cd% cd %CURRENT_DIR% if not exist %CAF_HOME%\bin\caf-server.bat ( goto end ) set CAF_BASE=%CAF_HOME% call %CAF_BASE%\bin\config.bat set HBN_TOOL=%CAF_BASE%\bin\hibernate-selector.bat if not exist %HBN_TOOL% ( goto end ) call %HBN_TOOL% %* set CLASSPATH= set CAF_BOOTSTRAP=%CAF_HOME%\%CAF_SERVER_PATH%\runtime\caf-bootstrap.jar set CAF_BOOTSTRAP_LANUCHER=org.springframework.boot.loader.PropertiesLauncher set CAF_MODULE_PATHS="%CAF_HOME%\%CAF_SERVER_PATH%\runtime\3rd","%CAF_HOME%\%CAF_SERVER_PATH%\runtime\libs" set CAF_BOOT_CONFIG_PATH=%CAF_HOME%/%CAF_SERVER_PATH%/runtime/ set JAVA_OPTS=%JAVA_OPTS% -Dparallel.startup=%CAF_PARALLEL_INIT% set /a totalMem=16777216+1 for /f "skip=1" %%i in ('wmic os get TotalVisibleMemorySize') do ( if %%i geq 0 set totalMem=%%i ) set /a "memorySize=%totalMem%/1024" set /a "totalMem=%memorySize%/10*6" set XmxSize=%totalMem%M if not defined CAF_MEM_OPTS ( if %memorySize% leq 16384 set CAF_MEM_OPTS=-Xmx%XmxSize% ) if not exist %CAF_HOME%\bin\java-home.bat ( goto end ) call %CAF_HOME%\bin\java-home.bat %1 if errorlevel 1 goto end if "%CLASSPATH%" == """" goto emptyClasspath set "CLASSPATH=%CLASSPATH%;" :emptyClasspath set CLASSPATH=%CLASSPATH%;%CAF_HOME%\%CAF_SERVER_PATH%\runtime\caf-bootstrap.jar if "%CAF_TMPDIR%" == """" goto gotTmpdir :gotTmpdir set CAF_TMPDIR=%CAF_BASE%\temp if not "%JSSE_OPTS%" == """" goto gotJsseOpts set JSSE_OPTS=-Djdk.tls.ephemeralDHKeySize=2048 :gotJsseOpts set JAVA_OPTS=%JAVA_OPTS% %JSSE_OPTS% set JAVA_OPTS=%JAVA_OPTS% -Djava.protocol.handler.pkgs=org.apache.caf.webresources set "JDK_JAVA_OPTIONS=%JDK_JAVA_OPTIONS% --add-opens=java.base/java.lang=ALL-UNNAMED" set "JDK_JAVA_OPTIONS=%JDK_JAVA_OPTIONS% --add-opens=java.base/java.io=ALL-UNNAMED" set "JDK_JAVA_OPTIONS=%JDK_JAVA_OPTIONS% --add-opens=java.base/java.util=ALL-UNNAMED" set "JDK_JAVA_OPTIONS=%JDK_JAVA_OPTIONS% --add-opens=java.base/java.util.concurrent=ALL-UNNAMED" set "JDK_JAVA_OPTIONS=%JDK_JAVA_OPTIONS% --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED" set ENDORSED_PROP=ignore.endorsed.dirs if "%JAVA_ENDORSED_DIRS%" == """" goto noEndorsedVar set ENDORSED_PROP=java.endorsed.dirs goto doneEndorsed :noEndorsedVar if not exist %CAF_HOME%\endorsed goto doneEndorsed set ENDORSED_PROP=java.endorsed.dirs :doneEndorsed set MAINCLASS=%CAF_BOOTSTRAP_LANUCHER% --spring.config.location=%CAF_BOOT_CONFIG_PATH% set ACTION=start set SECURITY_POLICY_FILE= set DEBUG_OPTS= set JPDA= set DEBUG_PORT="5005" if ""%1"" == ""run"" goto doRun if ""%1"" == ""start"" goto doStart goto end :doRun shift if not ""%1"" == ""-security"" goto execRunCmd shift set "SECURITY_POLICY_FILE=%CAF_BASE%\conf\caf.policy" goto execRunCmd :execRunCmd set CMD_LINE_ARGS= :setRunArgs if ""%1""=="""" goto doneRunSetArgs set CMD_LINE_ARGS=%CMD_LINE_ARGS% %1 shift goto setRunArgs :doneRunSetArgs "%JAVA_HOME%\bin\java" %CAF_OPTS% -server -Djava.io.tmpdir=%CAF_TMPDIR% -Dloader.path=%CAF_MODULE_PATHS% -Dfile.encoding=UTF-8 %JAVA_OPTS% -Dserver.runtime.path.name=%CAF_SERVER_PATH% %CAF_MEM_OPTS% -Dspring.profiles.active=prod -classpath %CLASSPATH% %MAINCLASS% goto end :doStart shift if "%TITLE%" == """" set TITLE=iGIX Server set _EXECJAVA=start "%TITLE%" cmd /k if not ""%1"" == ""-security"" goto execStartCmd shift set "SECURITY_POLICY_FILE=%CAF_BASE%\conf\caf.policy" goto execStartCmd :execStartCmd set CMD_LINE_ARGS= :setStartArgs if ""%1""=="""" goto doneSetStartArgs set CMD_LINE_ARGS=%CMD_LINE_ARGS% %1 shift goto setStartArgs :doneSetStartArgs %_EXECJAVA% "chcp 65001 > nul && %_RUNJAVA% %CAF_OPTS% -server -Djava.io.tmpdir=%CAF_TMPDIR% -Dloader.path=%CAF_MODULE_PATHS% -Dfile.encoding=UTF-8 %JAVA_OPTS% -Dserver.runtime.path.name=%CAF_SERVER_PATH% %CAF_MEM_OPTS% -Dspring.profiles.active=prod -classpath %CLASSPATH% %MAINCLASS% %CMD_LINE_ARGS%" goto end :end详细解释一下
03-27
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值