Решил подсобрать коды перекодировки текстов родными средствами Windows + добавить пару новых фишек -)
Итак,
Код (DOS):
chcp 866
cmd /d /a /c type utf16.txt > 866_out.txt
Код (DOS):
chcp 1251
cmd /d /a /c type utf16.txt > 1251_out.txt
Код (DOS):
chcp 65001
cmd /d /u /c type utf8.txt > .tmp
chcp 1251
type .tmp > 1251_out.txt
del .tmp
Если батник сохранять в кодировке 866
Код (DOS):
chcp 866
for %%? in ("") do chcp 1251 & cmd /d /a /c set /p=яю<NUL > .tmp
chcp 866
cmd /d /u /c type 866.txt >> .tmp
chcp 1251
cmd /d /a /c type .tmp > 1251_out.txt
del .tmp
Если батник сохранять в кодировке 1251
Код (DOS):
chcp 1251
cmd /d /a /c set /p=яю<NUL > .tmp
chcp 866
cmd /d /u /c type 866.txt >> .tmp
chcp 1251
cmd /d /a /c type .tmp > 1251_out.txt
del .tmp
Если батник сохранять в кодировке 866
Код (DOS):
chcp 866
for %%? in ("") do chcp 1251 & cmd /d /a /c set /p=по<NUL > .tmp
cmd /d /u /c type 1251.txt >> .tmp
chcp 866
cmd /d /a /c type .tmp > 866_out.txt
del .tmp
Если батник сохранять в кодировке 1251
Код (DOS):
chcp 1251
cmd /d /a /c set /p=яю<NUL > .tmp
cmd /d /u /c type 1251.txt >> .tmp
chcp 866
cmd /d /a /c type .tmp > 866_out.txt
del .tmp
С использованием JScript-вставки
Код (Javascript):
@set @x=0; /*
@echo off
call :Recode utf8.txt 1251_out.txt utf-8 windows-1251
pause
goto :eof
:Recode in.[исходный файл] in.[результирующий файл] in.[кодировка исходного файла] in.[кодировка результирующего файла]
cscript.exe //nologo //e:jscript "%~f0" "%~1" "%~2" "%~3" "%~4"
Exit /B
*/with (new ActiveXObject('ADODB.Stream')) {
Charset = WScript.Arguments(2);
Open();
LoadFromFile (WScript.Arguments(0));
Text = ReadText();
Close();
Charset = WScript.Arguments(3);
Open();
WriteText (Text);
SaveToFile (WScript.Arguments(1), 2);
Close();
}
Названия доступных кодировок можно посмотреть в колонке .NET Name
в статье: https://msdn.microsoft.com/en-us/lib...(v=vs.85).aspx
С использованием внешних утилит:
win_iconv
Это программа с открытым исходным кодом.
Скачать утилиту.
Синтаксис:
Код (DOS):
iconv [-c] [-s] [-f encoding] [-t encoding] [inputfile …]
Перечень кодировок:
Код (DOS):
iconv -l
Пример использования:
Код (DOS):
win_iconv -f UTF-16LE -t cp866 "UTFtext.txt" > "DOStext.txt"
Подробности в этой теме .
Демо-набор есть в архиве. Также прилагаю Excel-файл с всеми кодами символов, в том числе китайскими -)
Спасибо за внимание. Надеюсь, окажется Вам полезным.
Примеры универсальных (насколько это возможно для пакетного файла) перекодировщиков от ComSpec.
Код (DOS):
@chcp 866>nul
@<"in .file">"out.file" (for /f "delims=" %%i in ('find/n /v ""') do @chcp 1251>nul& set x=%%i& cmd/v/c echo [!x:*]^^=!)
Код (DOS):
@chcp 866>nul
@<"in .file">"out.file" (for /f "delims=" %%i in ('find/n /v ""') do @chcp 65001>nul& set x=%%i& cmd/v/c echo [!x:*]^^=!)
Код (DOS):
@chcp 1251>nul
@<"in .file">"out.file" (for /f "delims=" %%i in ('find/n /v ""') do @chcp 866>nul& set x=%%i& cmd/v/c echo [!x:*]^^=!)
Код (DOS):
@chcp 1251>nul
@<"in .file">"out.file" (for /f "delims=" %%i in ('find/n /v ""') do @chcp 65001>nul& set x=%%i& cmd/v/c echo [!x:*]^^=!)
Код (DOS):
@chcp 65001>nul
@<"in .file">"out.file" (for /f "delims=" %%i in ('find/n /v ""') do @chcp 866>nul& set x=%%i& cmd/v/c echo [!x:*]^^=!)
Код (DOS):
@chcp 65001>nul
@<"in .file">"out.file" (for /f "delims=" %%i in ('find/n /v ""') do @chcp 1251>nul& set x=%%i& cmd/v/c echo [!x:*]^^=!)
Код (DOS):
:: Не зависит от какой-нибудь из трёх (866, 1251, 65001) кодовых страниц, продекларированной на момент исполнения кода.
@<"in .file">"out.file" (for /f "delims=" %%i in ('find/n /v ""') do @chcp 866>nul& set x=%%i& cmd/v/c echo [!x:*]^^=!)
Код (DOS):
:: Не зависит от какой-нибудь из трёх (866, 1251, 65001) кодовых страниц, продекларированной на момент исполнения кода.
@<"in .file">"out.file" (for /f "delims=" %%i in ('find/n /v ""') do @chcp 1251>nul& set x=%%i& cmd/v/c echo [!x:*]^^=!)
Код (DOS):
:: Не зависит от какой-нибудь из трёх (866, 1251, 65001) кодовых страниц, продекларированной на момент исполнения кода.
@<"in .file">"out.file" (for /f "delims=" %%i in ('find/n /v ""') do @chcp 65001>nul& set x=%%i& cmd/v/c echo [!x:*]^^=!)
В отличие от ранее предлагавшихся перекодировщиков, основанных на построчном разборе текста в цикле командой "for", данный код абсолютно устойчив к специальным символам, встречающимся в тексте, и полностью сохраняет форматирование текста, включая пустые строки. Код проверялся на всех символах английской и русской раскладки клавиатуры. Максимальная длина обрабатываемых строк может достигать 4091 символа.
Код (DOS):
@echo off
>nul chcp 1251
<"example.txt" (for /f "delims=" %%i in ('more') do >nul chcp 866& set /a n+=1& call set x%%n%%=%%i)
set x
pause
Ни в коем случае нельзя chcp 1251 (т.е. весь вот этот код) помещать в блок скобок, если не включен режим отложенного раскрытия переменных.