MyTetra Share
Делитесь знаниями!
Перекодировка текста (сборник кодов для различных кодовых страниц)
16.03.2019
23:43
Раздел: !Закладки - VBA - Кодировки

Решил подсобрать коды перекодировки текстов родными средствами 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 (т.е. весь вот этот код) помещать в блок скобок, если не включен режим отложенного раскрытия переменных.

 


Прикрепленные файлы:
Так же в этом разделе:
 
MyTetra Share v.0.52
Яндекс индекс цитирования