Перекодировка текста (сборник кодов для различных кодовых страниц)

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
6,132
Реакции
5,906
Баллы
648
Привет!

Решил подсобрать коды перекодировки текстов родными средствами Windows + добавить пару новых фишек -)

Итак,
CMD/BATCH:
chcp 866
cmd /d /a /c type utf16.txt > 866_out.txt
CMD/BATCH:
chcp 1251
cmd /d /a /c type utf16.txt > 1251_out.txt
CMD/BATCH:
chcp 65001
cmd /d /u /c type utf8.txt > .tmp
chcp 1251
type .tmp > 1251_out.txt
del .tmp
Если батник сохранять в кодировке 866
CMD/BATCH:
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
CMD/BATCH:
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
CMD/BATCH:
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
CMD/BATCH:
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

Это программа с открытым исходным кодом.

Скачать утилиту.

Синтаксис:
CMD/BATCH:
iconv [-c] [-s] [-f encoding] [-t encoding] [inputfile …]
Перечень кодировок:
CMD/BATCH:
iconv -l
Пример использования:
CMD/BATCH:
win_iconv -f UTF-16LE -t cp866 "UTFtext.txt" > "DOStext.txt"
Подробности в этой теме.

Демо-набор есть в архиве. Также прилагаю Excel-файл с всеми кодами символов, в том числе китайскими -)
Спасибо за внимание. Надеюсь, окажется Вам полезным.
 

Вложения

Последнее редактирование модератором:

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
6,132
Реакции
5,906
Баллы
648
Примеры универсальных (насколько это возможно для пакетного файла) перекодировщиков от ComSpec.

CMD/BATCH:
@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:*]^^=!)
CMD/BATCH:
@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:*]^^=!)
CMD/BATCH:
@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:*]^^=!)
CMD/BATCH:
@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:*]^^=!)
CMD/BATCH:
@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:*]^^=!)
CMD/BATCH:
@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:*]^^=!)
CMD/BATCH:
:: Не зависит от какой-нибудь из трёх (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:*]^^=!)
CMD/BATCH:
:: Не зависит от какой-нибудь из трёх (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:*]^^=!)
CMD/BATCH:
:: Не зависит от какой-нибудь из трёх (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 символа.

CMD/BATCH:
@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 (т.е. весь вот этот код) помещать в блок скобок, если не включен режим отложенного раскрытия переменных.
 
Последнее редактирование модератором:
Сверху Снизу