2015-01-26 4 views
0

У меня есть файлы CSV, которые находятся в формате UTF16 Big Endian. Мне нужно написать пакетный скрипт, чтобы преобразовать его в UTF8.Изменение кодировки файла с UTF16 на UTF8 в партии

Возможно ли это сделать без внешних программ или с внешними программами, поставляемыми с ОС (и, следовательно, всегда можно ожидать, что они будут там)?

+0

возможно дубликат [Преобразование текста/CSV файлов в формате UTF-8 в пакетном файле] (http://stackoverflow.com/questions/26273926/converting-text-csv-files-to-utf-8 -format-in-batch-file) – sashoalm

ответ

0

Несомненно. Просто замените спецификацию UTF-16 BE спецификацией UTF-8.

@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. 
+0

Спасибо Rojo. Но все-таки есть проблема. После реализации кода я столкнулся с этой ошибкой: система не может записать на указанное устройство. – Arpit

+0

@Arpit Вероятно, проблема с системной кодовой страницей. Я просто добавил несколько строк, чтобы изменить кодовую страницу на западноевропейскую латынь, исправить спецификацию, а затем изменить кодовую страницу так, как она была. Посмотрите, исправляет ли это это. Если нет, то я предполагаю, что ошибка - это именно то, что она говорит, что у вас нет права на запись в файл или каталог, который вы пытаетесь записать. – rojo

Смежные вопросы