批处理小函数:将UTF-8编码格式的文本转换成简体中文GBK编码格式

将UTF-8编码格式的文本转换成简体中文GBK(ANSI-936)编码格式

:: 将UTF-8编码格式的文本转换成ANSI-936编码格式
::
:: 使用方法: call :UTF8_to_ANSI936 fileOut fileIn
::
:: 输入UTF-8编码格式的文本文档fileIn, 输出ANSI编码格式的文本文档strOut
::
:UTF8_to_ANSI936

    CALL :GET_SYS_DEFAULT_ACTIVE_CODE_PAGE bf_CODE_PAGE

  IF NOT "%POWERSHELL_EXE%"=="" (GOTO :U2A_TO_NEXT_1)

    FOR /F "usebackq delims=" %%i IN (`WHERE PowerShell.exe 2^>NUL`) DO (CALL,SET POWERSHELL_EXE=%%i)

  IF "%POWERSHELL_EXE%"=="" (GOTO :U2A_USE_CMD)

  :U2A_TO_NEXT_1

    FOR /F "usebackq tokens=2,* delims=. " %%i IN (`^(^^^"%POWERSHELL_EXE%^^^" $PSVersionTable 2^>NUL^)^|^(FINDSTR /C:^^^"PSVersion ^^^"^)`) DO (CALL,SET POWERSHELL_VER=%%i)

  IF %POWERSHELL_VER% LSS 3 (GOTO :U2A_USE_CMD)

    "%POWERSHELL_EXE%" Get-Content -Encoding UTF8 "%~2" ^| Out-File -Encoding Unicode "%TEMP%\U.bom"


    :: 936: ANSI/OEM-简体中文GBK
    CHCP 936 1>NUL 2>&1

  GOTO :U2A_OUTPUT_ANSI936
    :: GOTO :EOF


  :U2A_USE_CMD

    IF "%CERTUTIL_EXE%"=="" ( FOR /F "usebackq delims=" %%i IN (`WHERE certutil.exe 2^>NUL`) DO (CALL,SET CERTUTIL_EXE=%%i) )
    IF "%CERTUTIL_EXE%"=="" (
      ECHO Error: The system can NOT find the specified file: certutil.exe.
      :: 2-系统找不到指定的文件。
      CALL :PAUSE_AND_EXIT /B 2
    )

    :: https://learn.microsoft.com/zh-cn/windows-server/administration/windows-commands/certutil
    ::
    :: 并非所有版本的 certutil 都提供本文档介绍的所有参数和选项。
    ::
    :: 可以通过运行 certutil -? 或 certutil <parameter> -? 来查看你的 certutil 版本提供的选项。
    ::
    :: 在Win11 Beta版本中, certutil -?>mmmtxt, 结果有点乱

    :: 1252: ANSI-拉丁语I
    :: CHCP 1252 1>NUL 2>&1

    ECHO FFFE>"%TEMP%\U.bom"
    ("%CERTUTIL_EXE%" -f -Unicode -decodehex "%TEMP%\U.bom" "%TEMP%\U.bom" 2) 1>NUL 2>&1
    SET "CERTUTIL_EXE="


    :: 65001: UTF-8
    CHCP 65001 1>NUL 2>&1

    :: /C参数只能放最后
    ::
    :: 晕,有些文档转换后有少量乱码
    ::
    CMD /U/D/C TYPE "%~2">"%TEMP%\%~n2_unicode-without-BOM.txt"


    :: 936: ANSI/OEM-简体中文GBK
    CHCP 936 1>NUL 2>&1

    TYPE "%TEMP%\%~n2_unicode-without-BOM.txt">>"%TEMP%\U.bom"

    DEL /F /Q "%TEMP%\%~n2_unicode-without-BOM.txt" 1>NUL 2>&1

  :U2A_OUTPUT_ANSI936

    TYPE "%TEMP%\U.bom">"%~1"

    CHCP %bf_CODE_PAGE% 1>NUL 2>&1

    SET "bf_CODE_PAGE="

    DEL /F /Q "%TEMP%\U.bom" 1>NUL 2>&1

  GOTO :EOF

:: END OF UTF8_to_ANSI936

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值