РУССКИЙ ТЕКСТ в консоли

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

  1. Dragokas
    Оффлайн

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

    Сообщения:
    4.478
    Симпатии:
    4.307
    Вывод русского текста в консоль из пакетного файла .bat, .cmd
    представляет иногда трудность.

    Почему же так?

    Оболочка CMD.exe работает по-умолчанию в кодировке DOS (OEM-866)
    Блокнот Windows создает файл в кодировке WIN-1251

    Как понимаете, получим крякозябры.
    Выход: использовать специальный редактор, который сохраняет батник в кодировке CP-866.

    Из наиболее популярных:

    AkelPad

    Скачать редактор с официального сайта.
    Скачать версию с плагинами и подсветкой.
    Скачать уже настроенную с плагинами и подсветкой.

    Akel_Default.png
    Akel_mod.png

    Сам пользуюсь вот такой модификацией выше, что и Вам советую
    (в конце поста настроенный мною редактор - шрифт, тема, плагины).

    Скачать с OSZone. Нужна дополнительная сборка.
    Скачать уже собранную и настроенную мною (шрифт, тема, плагины). Cм. в конце этого поста.

    Запуск из папки "MyAkelPad".
    Если папку с редактором скопируете в Program Files,
    не забудьте дать ей полные права (в комплекте есть батник FA.cmd - запустить "от имени Администратора" из папки с редактором).


    Чтобы создать новый файл в кодировке DOS:
    Меню "Файл" -> "Сохранить как..." -> из выпадающего списка выбрать "Кодировка OEM-866".
    Файл должен иметь расширение bat или cmd.

    Для себя я настроил AkelPad так, чтобы он всегда сохранял в кодировке OEM-866 (Настройки -> Параметры -> Кодировка по-умолчанию -> OEM-866.)


    Чтобы правильно сконвертировать уже имеющийся в редакторе код с кириллицей:
    Войти в редактор.
    1) Ctrl+A, скопировать код.
    2) Удалить код.
    3) Меню "Кодировки" -> выбрать "Сохранить в DOS-866".
    4) Вставить код.
    5) Сохранить, запустить.

    Полезные горячие комбинации клавиш:
    Запуск скрипта (Ctrl + F5)
    На весь экран (F11)
    Сохранить (Ctrl + S)
    Открыть в кодировке WIN (Alt + W)
    Открыть в кодировке DOS (Alt + D)



    Notepad++

    Скачать редактор с официального сайта.
    Обсуждение редактора на форуме.

    Notepad++.PNG

    Чтобы создать новый файл в кодировке DOS:
    Меню "Кодировки" -> "Кодировки" -> "Кириллица" -> "OEM-866"
    "Файл" -> "Сохранить как..." -> пишем имя файла и расширение bat или cmd -> Сохранить.

    Чтобы правильно сконвертировать уже имеющийся в редакторе код с кириллицей:
    Войти в редактор.
    1) Ctrl+A, скопировать код.
    2) Удалить код.
    3) Меню "Кодировки" -> "Кодировки" -> "Кириллица" -> "OEM-866"
    4) Вставить код.
    5) Сохранить, запустить.


    Помните: в редакторе не должно быть видно "крякозябер", иначе это значит: Вы неправильно скопировали код (или открыли в представлении другой кодировки - меню "Вид").
    В Windows Vista, 7 часто бывает, что код с форума "портиться" в буфере.
    Выход: когда копируете код, убедитесь, что включена русская раскладка клавиш, или воспользуйтесь этим твиком # 2.
     

    Вложения:

    • MyAkelPad.zip
      Размер файла:
      4 МБ
      Просмотров:
      38
    shestale, FraidZZ, Kиpилл и ещё 1-му нравится это.
  2. Phoenix
    Оффлайн

    Phoenix Активный пользователь

    Сообщения:
    1.846
    Симпатии:
    1.833
    Есть и такая вещь.
    http://www.rusf.ru/books/yo/xcode.html
    PHP:
    xcode +a -w help.txt help0.txt
    ‚맮ў: xcode -E -[hH?] -[wkaim1234567890] +[wkaim1234567890] [-q] [in [out]]
    -E -h in English (don't forget to add -h or -H switch!)
    -v Ёд®а¬ жЁп ® ўҐабЁЁ
    -H Џ®« п бЇа ўЄ , бЇЁб®Є 14 Ї®¤¤Ґа¦Ёў Ґ¬ле Є®¤Ёа®ў®Є Ё «ЁжҐ§Ёп р-ware
    -d ¤ў®© п ЇҐаҐЄ®¤Ёа®ўЄ (Їа®Ўг©вҐ, Ґб«Ё Їа®бв® Є®¬ ¤ 'xcode' Ґ ба Ў®в « )
    -q ¤ҐЄ®¤Ёа®ў ЁҐ "quoted-pritable" бЁ¬ў®«®ў, ЁбЇ®«м§гҐ¬ле ў MIME
    -l ¤ҐЄ®¤Ёа®ў ЁҐ html-“ЁЄ®¤ ⥪бв [ўа®¤Ґ Дима]
    -c ®ЇаҐ¤Ґ«Ёвм Є®¤Ёа®ўЄг Ё ўл¤ вм Ґс ў ўл室®© д ©« (Ї®¤а®Ў п бЇа ўЄ Ї® -H)
    -t Їа®Ё§ўҐбвЁ unix2dos ЇаҐ®Ўа §®ў ЁҐ (ЇаҐўа вЁвм LF ў CR/LF) ў DOS/WIN
    -p ०Ё¬ вагЎл (вॡгҐвбп в®«мЄ® ў DOS/Win ®Єа㦥ЁЁ)
    -s ०Ё¬ silent --- Ґ ўлў®¤Ёвм Ёд®а¬ жЁо ® Є®¤Ёа®ўЄ е
    …б«Ё ўе®¤®©/ўл室®© д ©« Ґ гЄ § , ЁбЇ®«м§гҐвбп бв ¤ авл© ўў®¤/ўлў®¤.
    -a ўлў®¤Ё¬ ў Є®¤Ёа®ўЄҐ cp866 (Ї® 㬮«з Ёо)
    -w ўлў®¤Ё¬ ў Є®¤Ёа®ўЄҐ cp1251
    -k ўлў®¤Ё¬ ў Є®¤Ёа®ўЄҐ koi8-r
    -i ўлў®¤Ё¬ ў Є®¤Ёа®ўЄҐ iso8859-5
    -m ўлў®¤Ё¬ ў Є®¤Ёа®ўЄҐ mac
    +a ўе®¤Ґ Є®¤Ёа®ўЄ cp866
    +w ўе®¤Ґ Є®¤Ёа®ўЄ cp1251
    +k ўе®¤Ґ Є®¤Ёа®ўЄ koi8-r
    +i ўе®¤Ґ Є®¤Ёа®ўЄ iso8859-5
    +m ўе®¤Ґ Є®¤Ёа®ўЄ mac
    Вызов: xcode -E -[hH?] -[wkaim1234567890] +[wkaim1234567890] [-q] [in [out]]
    -E -h in English (don't forget to add -h or -H switch!)
    -v информация о версии
    -H Полная справка, список 14 поддерживаемых кодировок и лицензия Ё-ware
    -d двойная перекодировка (пробуйте, если просто команда 'xcode' не сработала)
    -q декодирование "quoted-pritable" символов, используемых в MIME
    -l декодирование html-Уникод текста [вроде Дима]
    -c определить кодировку и выдать её в выходной файл (подробная справка по -H)
    -t произвести unix2dos преобразование (превратить LF в CR/LF) в DOS/WIN
    -p режим трубы (требуется только в DOS/Win окружении)
    -s режим silent --- не выводить информацию о кодировках
    Если входной/выходной файл не указан, используется стандартный ввод/вывод.
    -a выводим в кодировке cp866 (по умолчанию)
    -w выводим в кодировке cp1251
    -k выводим в кодировке koi8-r
    -i выводим в кодировке iso8859-5
    -m выводим в кодировке mac
    +a на входе кодировка cp866
    +w на входе кодировка cp1251
    +k на входе кодировка koi8-r
    +i на входе кодировка iso8859-5
    +m на входе кодировка mac
     
    Последнее редактирование: 19 окт 2013
    FraidZZ и Kиpилл нравится это.
  3. Dragokas
    Оффлайн

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

    Сообщения:
    4.478
    Симпатии:
    4.307
    Перекодировка текста

    • Внешними утилитами
    win_iconv
    любая кодировка <-> любая кодировка

    Автор: Yukihiro Nakadaira
    Версия: 0.0.6 (от 22.11.2012)
    Это утилита с открытым исходным кодом.

    Скачать утилиту: 1. Оф. сайт. 2. Зеркало (safezone).

    Синтаксис:
    iconv [-c] [-s] [-f encoding] [-t encoding] [inputfile …]

    Получить перечень названий кодировок:
    Код (DOS):
    iconv -L | sort
    Примеры использования:
    Юникод -> OEM-866
    Код (DOS):
    win_iconv -f UTF-16LE -t cp866 "UTFtext.txt" > "DOStext.txt"
    Win-1251 -> OEM-866
    Код (DOS):
    win_iconv -f WINDOWS-1251 -t cp866 "WINtext.txt" > "DOStext.txt"
    VBA (на Excel-e) :) + таблица символов.
    1. OEM-866 <-> Win-1251
    2. -> Unicode.
    Автор: Dragokas
    Написан на VBA (Excel). Скачать.

    Для работы необходимо включить макросы:
    Для Office = 2003: Сервис -> Макрос -> Безопасность -> Выставить "Средний" или "Низкий".
    Для Office > 2003 MSDN

    Описание функций:
    • Перекодировка:
      - в Unicode.
      - Из OEM-866 -> в Win-1251
      - Из Win-1251 -> в OEM-866.
    • Таблица символов с их 10-ричным и 16-ым представлениями:
      - 1-байтовая;
      - 2-байтовая.
    to1251.exe (Assembler)
    OEM-866 -> WIN-1251
    Скачать.
    Самый быстрый перекодировщик. Написан на ассемблере =)

    Автор: Charles Kludge

    Пример использования:
    Перекодировать вывод команды ipconfig и записать результат в файл result.txt
    Код (DOS):
    ipconfig /all | to1251.exe > result.txt
    Перекодировать файл file1.txt и записать результат в файл result.txt
    Код (DOS):
    to1251.exe < file1.txt > result.txt
    Код (ASM):
    format PE console 4.0
    include 'win32a.inc'
    next:  invoke  crt_getchar
      push  eax
      invoke  GetLastError
      or  eax, eax
      jnz exit
      pop eax
      call  recode
      invoke  crt_putchar, eax
      jmp next
    exit:
      invoke  ExitProcess,0
    recode:
      cmp eax,080h  ; rus cap 'A'
      jb  @5
      cmp eax,0afh  ; rus small 'п'
      ja  @1
      or  al,40h
    @5: ret
    @1:
      cmp al,0e0h  ; rus small 'р'
      jae @4
      mov al,20h  ; pseudoghaphic chrs 0xb0-0xdf -> <space>
      ret
    @4: cmp al, 0efh  ; rus small 'я'
      ja  @3
      add al,10h
      ret
    @3:  and ax, 0fh
      mov ebx, xlt
      xlatb
    @2:
      ret
    xlt db  0a8h, 0b8h, 0aah, 0bah, 0afh, 0bfh, 0a1h, 0a2h, 0b0h, 95h, 0b7h,20h,0b0h,0a4h,20h,20h
    ; import data in the same section
    data import
    library kernel32,'KERNEL32.DLL',\
      msvcrt,'MSVCRT.DLL'
    import kernel32,\
      ExitProcess,'ExitProcess',\
      GetLastError,'GetLastError'
    import msvcrt,\
      crt_getchar,'getchar',\
      crt_putchar, 'putchar'
    end data
    • Родными средствами Windows.
    CMD.
    866 -> в Юникод
    Записать текст во внешний файл в кодировке Юникод:

    Код (DOS):
    cmd /U /C echo Всё ГУД>"myfile.txt"
    Батник должен быть в кодировке 866.

    Перекодировка файла с OEM-866 -> в Юникод:

    Код (DOS):
    cmd /U /C type "myfile_866.txt" > "myfile_Unicode.txt"
    Вариант с соблюдением всех стандартов юникода UTF-16
    и возможностью указать исходную кодовую страницу:

    Использование:

    Код (DOS):
    Batch.cmd infile outfile src_codepage
    где:

    Batch.cmd - сам Batch-файл
    infile - файл для перекодировки
    outfile - выходной файл
    src_codepage - необязательный параметр. Номер кодовой страницы исходного файла.

    2 варианта кода
    (смотря в какой кодировке будет батник):

    1) Исходник кода сохранить в кодировке WIN-1251:
    Код (DOS):
    @echo off
    :: преобразование текстового файла в unicode (utf-16 LE)
    :: вызов: to_uni infile outfile codepage
    :: BAT-файл должен быть сохранен в кодировке WIN-1251
    SetLocal EnableExtensions
    For /f "tokens=2 delims=:" %%G in ('CHCP') do Set _codepage=%%G
    chcp 1251 >nul
    CMD.EXE /D /A /C (set /p=яю)<NUL > "%~2"
    CHCP %~3 >NUL
    CMD.EXE /D /U /C TYPE "%~1" >> "%~2"
    CHCP %_codepage% >NUL
    2) исходник кода сохранить в кодировке OEM-866:
    Код (DOS):
    @echo off
    :: преобразование текстового файла в unicode (utf-16 LE)
    :: вызов: to_uni infile outfile codepage
    :: BAT-файл должен быть сохранен в кодировке OEM-866
    SetLocal EnableExtensions
    For /f "tokens=2 delims=:" %%G in ('CHCP') do Set _codepage=%%G
    chcp 866 >nul
    for /F %%? in ('echo яю') do chcp 1251 >nul& CMD.EXE /D /A /C (set /p=яю)<NUL > "%~2"
    CHCP %~3 >NUL
    CMD.EXE /D /U /C TYPE "%~1" >> "%~2"
    CHCP %_codepage% >NUL
    CMD
    OEM-866 -> WIN-1251
    Код (DOS):
    @echo off
    SetLocal
    ::Файл с кодировкой OEM-866
    set FileIn=text.txt
    ::Результат, куда записывать WIN-1251
    set FileOut=text.txt

    chcp 866> nul
    for /f "delims=" %%a in (%FileIn%) do (
      if not defined cpReady (
      chcp 1251> nul
      set CpReady=True
      )
      call :convert "%%a"  2>NUL
    )
    chcp 866> nul
    goto :eof

    :convert
    echo.%~1>>"%FileOut%"
    VBScript + CMD
    Win-1251 <-> OEM-866
    Результат сохраняется в исходный файл.

    Вызывающий CMD:
    OEM-866 -> Win-1251
    Код (DOS):
    cscript.exe //nologo Recode.vbs "cp866" "windows-1251" "имя_файла"
    Win-1251 -> OEM-866
    Код (DOS):
    cscript.exe //nologo Recode.vbs "windows-1251" "cp866" "имя_файла"
    Вызываемый Recode.vbs (положить рядом с батником):

    Код (vb.net):
    On Error Resume Next
    FullName = WScript.Arguments(2)

    With CreateObject("ADODB.Stream")
      .Type = 2
      .Charset = WScript.Arguments(0)
      .Open
      .LoadFromFile FullName
      Text = .ReadText()
      .Close
      .Charset = WScript.Arguments(1)
      .Open
      .WriteText (Text)
      .SaveToFile FullName, 2
      .Close
    End with

    Посмотреть вложение win-iconv-0.0.6-bin.zip
    Посмотреть вложение FromUnicode (конвертор)2.zip
    Посмотреть вложение to1251.zip
     
    Последнее редактирование: 20 ноя 2013
    FraidZZ, Phoenix и Kиpилл нравится это.

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