Batch file 批量将文件编码从UTF16更改为UTF8
我有一些UTF16大端格式的CSV文件。我需要写一个批处理脚本来转换它在UTF8Batch file 批量将文件编码从UTF16更改为UTF8,batch-file,utf-8,Batch File,Utf 8,我有一些UTF16大端格式的CSV文件。我需要写一个批处理脚本来转换它在UTF8 如果没有外部程序,或者使用操作系统附带的外部程序(因此可以一直在那里),是否可以做到这一点?当然可以。只需将UTF-16 BE BOM替换为UTF-8 BOM即可 @echo off setlocal set "csvfile=test.csv" :: store current console codepage to var for /f "tokens=2 delims=:" %%I in ('chcp')
如果没有外部程序,或者使用操作系统附带的外部程序(因此可以一直在那里),是否可以做到这一点?当然可以。只需将UTF-16 BE BOM替换为UTF-8 BOM即可
@echo off
setlocal
set "csvfile=test.csv"
:: store current console codepage to var
for /f "tokens=2 delims=:" %%I in ('chcp') do set "_codepage=%%I"
:: temporarily change console codepage to UTF-8
>NUL chcp 1252
<"%csvfile%" set /p "firstLine="
setlocal enabledelayedexpansion
>fixed.csv echo(!firstLine:*ÿ=!
endlocal
for /f "usebackq skip=1 delims=" %%I in ("%csvfile%") do (
>>fixed.csv echo(%%I
)
:: restore console to original codepage
>NUL chcp %_codepage%
>NUL move /y fixed.csv "%csvfile%"
echo Fixed.
I'll leave it as an exercise for the O.P. to make this loop through multiple CSV files.
@echo关闭
setlocal
设置“csvfile=test.csv”
::将当前控制台代码页存储到变量
对于/f“tokens=2 delims=:”('chcp')中的%%I do set“\u代码页=%%I”
::暂时将控制台代码页更改为UTF-8
>NUL chcp 1252
fixed.csv echo(!firstLine:*ÿ=ï»!)!
端部
对于/f“usebackq skip=1 delims=“%%I in”(“%csvfile%”)do(
>>已修复.csv回音(%%I)
)
::将控制台还原到原始代码页
>NUL chcp%\u代码页%
>NUL move/y fixed.csv“%csvfile%”
回声修正。
我将把它作为一个练习留给O.P.通过多个CSV文件进行循环。
Thank Rojo可能重复。但仍然存在一些问题。在执行代码后,我遇到了一个错误:系统无法写入指定的设备。@ARP这可能是系统代码页问题。我只是添加了几行代码,将代码页更改为西欧拉丁语,修复BOM,然后将代码页更改回原来的方式如果没有,那么我猜错误正是它所说的,即您没有对您试图写入的文件或目录的写入权限。