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

Тема в разделе "Пакетные файлы CMD, BAT", создана пользователем Dragokas, 17 июл 2016.

  1. Dragokas
    Оффлайн

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    4.497
    Симпатии:
    4.312
    Привет!

    Решил подсобрать коды перекодировки текстов родными средствами 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-файл с всеми кодами символов, в том числе китайскими -)
    Спасибо за внимание. Надеюсь, окажется Вам полезным.
     

    Вложения:

    Последнее редактирование модератором: 17 июл 2016
    orderman и Kиpилл нравится это.
  2. Dragokas
    Оффлайн

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    4.497
    Симпатии:
    4.312
    Примеры универсальных (насколько это возможно для пакетного файла) перекодировщиков от 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 (т.е. весь вот этот код) помещать в блок скобок, если не включен режим отложенного раскрытия переменных.
     
    Последнее редактирование модератором: 17 июл 2016
    Phoenix и Kиpилл нравится это.
  3. regist
    Оффлайн

    regist гоняюсь за туманом Ассоциация VN/VIP VIP Разработчик

    Сообщения:
    11.382
    Симпатии:
    5.268
    ZhALeAs.png
     
    orderman, Kиpилл, shestale и ещё 1-му нравится это.

Поделиться этой страницей