本帖最后由 i.i 于 2020-11-23 23:34 编辑
ANSI和UTF-8编码互转,利用VBS实现的教程在网上很多,这是我用批处理实现的代码
因为最近在写一个尽量用纯批处理实现的脚本,遇到了编码转换的问题,借鉴了这个论坛的帖子得以解决:http://www.bathome.net/thread-43846-1-1.html
20-11-23 更新,将需要处理的文本文件拖拽到批处理即可转换
下面直接放代码:
[Plain Text] 纯文本查看 复制代码 ::UTF-8 to ANSI
::UTF-8 → Unicode
CHCP 65001
::如果输入的 UTF-8 没有 BOM,%~dpn1_unicode-without-BOM.txt 打开乱码
CMD /D /U /C TYPE %~1 > %~dpn1_unicode-without-BOM.txt
::取得 Unicode BOM
ECHO.//4=>U.bom
certutil -decode -f U.bom U.bom >NUL
::Unicode → Unicode BOM
CHCP 936
MOVE /y U.bom %~dpn1_Unicode-BOM.txt >NUL
TYPE %~dpn1_unicode-without-BOM.txt >> %~dpn1_Unicode-BOM.txt
::Unicode BOM → ANSI
TYPE %~dpn1_Unicode-BOM.txt > %~dpn1_ANSI.txt
DEL /Q /F %~dpn1_unicode-without-BOM.txt %~dpn1_Unicode-BOM.txt
[Plain Text] 纯文本查看 复制代码 :: ANSI To UTF-8
@ECHO OFF
SETLOCAL EnableDelayedExpansion
:: Get BOM(Byte order mark): ZERO WIDTH NO-BREAK SPACE
:: "绿图" in unicode: \u7eff\u56fe
SET GBK=绿图
CHCP 1252 >NUL
FOR /F %%a IN ('CMD/D/U/C ECHO !GBK!') DO SET b=%%a
:: Use UTF-16 Little-Endian
SET HEAD=!b:~0,1!!b:~2,1!
SET /P=!HEAD!<nul>U.BOM
::ANSI → Unicode BOM
CHCP 936
MOVE /y U.BOM %~dpn1_Unicode-BOM.txt
CMD /D /U /C TYPE %~1 >> %~dpn1_Unicode-BOM.txt
::Unicode BOM → UTF-8
CHCP 65001
TYPE %~dpn1_Unicode-BOM.txt > %~dpn1_UTF-8.txt
DEL %~dpn1_Unicode-BOM.txt
CHCP 936 |