Форум программистов, компьютерный форум, киберфорум
Наши страницы
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.72/824: Рейтинг темы: голосов - 824, средняя оценка - 4.72
Dragokas
Эксперт WindowsАвтор FAQ
16966 / 7051 / 856
Регистрация: 25.12.2011
Сообщений: 10,861
Записей в блоге: 16
#1

Русский текст в консоли

19.12.2012, 15:59. Просмотров 151289. Ответов 2

Написав в блокноте Windows (Notepad.exe) батник 1.bat такого содержания
Bash
@Echo off
Echo Введите текст. Завершение ввода - комбинация Ctrl+Z {ENTER}
copy con temp.txt
мы получим "абракадабру":



Почему так происходит?
Консоль работает в кодировке DOS (codepage 866).
Блокнот Windows создает пакетный файл в кодировке WIN (codepage 1251).

Поэтому, когда Вы запускаете файл, консоль отображает его в своей (DOS) кодировке.


Решение (3 способа):

1 способ (сохранение файла в кодировке OEM-866):
Скачаем текстовый редактор, поддерживающий сохранение текста в кодировке OEM-866 (DOS):

AkelPad

Чтобы создать новый файл в кодировке 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++

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

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

Скачать редактор с официального сайта.




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


2 способ (смена кодовой страницы):
Сменить кодовую страницу консоли.

А именно, в начале пакетного файла написать:
Bash
1
chcp 1251 >nul
Это поможет Вам только частично.
Что можно?
Bash
md "Моя папка"
Создаст папку "Моя папка" с нормальными символами.

Что нельзя:
Bash
Echo Мой текст
Все равно выведет текст "абракодаброй".
Кроме того, текст сообщений от команд консоли тоже станет нечитаемым.

Но русский текст все равно можно вывести таким трюком:

2а)

Bash
1
2
chcp 1251 >nul
for /f "delims=" %%A in ("Мой текст") do >nul chcp 866& echo.%%A
2б)

Bash
1
2
3
4
5
chcp 1251 >NUL
set x=Русский текст
chcp 866 >NUL
echo %x%
pause
3 способ (для ленивых):
(или для тех, кто не может установить себе продвинутый редактор по религиозным или др. причинам )
Конвертируем Batch-файл правым кликом мыши ^_^

Пример для Windows 7:
1) Пуск -> в поисковой строке набрать Shell:SendTo
2) Откроется папка, в которую нужно скопировать RecodeToDOS.vbs из этого архива.

Использование:
Правый клик мыши по Batch-файлу -> Отправить -> RecodeToDOS
Файл будет заменен перекодированной версией.

Код исходника

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
On Error Resume Next
FullName = WScript.Arguments(0)
 
With CreateObject("ADODB.Stream")
    .Type = 2
    .Charset = "windows-1251"
    .Open
    .LoadFromFile FullName
    Text = .ReadText()
    .Close
 
    .Charset = "cp866"
    .Open
    .WriteText (Text)
    .SaveToFile FullName, 2
    .Close
End with
Старый вариант: перекодировщик на языке Batch. Может некорректно работать со спецсимволами.


Здесь достаточно перетянуть Ваш файл на нижеуказанный файл-сценарий.
Ваш исходный файл будет заменён перекодированным вариантом.

Скачать код архивом.

Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
@echo off
if "%1"=="" (Echo Перетащите .bat/.cmd файл на этот сценарий& Goto :ext)
Setlocal
set Src=%~dpnx1
chcp 1251> nul
for /f "UseBackQ delims=" %%a in ("%Src%") do (
  if not defined cpReady (
    chcp 866> nul
    set CpReady=True
  )
  call :convert "%%a"
)
Echo Файл %~nx1 перекодирован.
:ext
pause>nul
goto :eof
 
:convert
if Defined Write (
    echo %~1>>"%Src%"
) else (
    Set Write=True
    echo %~1>"%Src%"
)



Способ 3а. Ухищренный (для истинных кодеров).
Писать в блокноте кириллический текст в виде псевдосимволов (т.е. вручную перекодировать) ALT + код символа (на цифровой клавиатуре) Обсуждаем здесь

Способ 4. Он-лайн перекодировщик

Способ 5. Использовать стороннее ПО.


Обсуждения прошу вести в теме: Русский язык в командной строке
Обзор других редакторов: Кто какие программы использует для написания батников?

Миниатюры
28
Вложения
Тип файла: zip RecodeToDOS.zip (361 байт, 1640 просмотров)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.12.2012, 15:59
Ответы с готовыми решениями:

Русский текст при вставке в буфер обмена
Здравствуйте! Подскажите, пожалуйста, как сделать так, чтобы текст из консоли...

Кракозябры при выполнении bat-файла c командами, содержащими русский текст
Здравствуйте, возникает ошибка при запуске bat файл c русским текстом. chcp...

Текст в консоли выглядит нормально, но при перенаправлении вывода в файл кракозябры в тексте снова появляются
Друзья! Есть файл hello.txt (содержание: "Hello, word!" + кракозябры, кодировка...

Русский язык в BAT
Всем здраствуйте! У меня не работает команда chcp 1251 в BAT. Я её написал...

Русский язык в командной строке
Всем ку. Проблема в заголовке, собственно: вместо русского языка в bat-нике...

2
gimntut
879 / 182 / 15
Регистрация: 18.07.2011
Сообщений: 257
19.12.2012, 18:55 #2
В дополнение к теме "Русский текст в консоли"
Для постоянной работы с батниками удобно пользоваться редактором Scite-ru.
Нужно только запомнить три клавиши:
Alt + F9 - Переключиться в кодировку cp866
F5 - Выполнить батник в отдельном окне
F7 - Вывести результат выполнения батника в консоль Scite

У Scite есть огромный недостаток, он не позволяет копировать тексты написанные в кодировке cp866.
Поэтому приходится пользоваться следующим батником:
Bash
1
clip < "%~1"
Продвинутые пользователи могут подключать батники и другие скрипты как плагины к Scite-Ru.
4
Dragokas
Эксперт WindowsАвтор FAQ
16966 / 7051 / 856
Регистрация: 25.12.2011
Сообщений: 10,861
Записей в блоге: 16
08.06.2013, 18:34  [ТС] #3
Русский текст в консольном приложении C++

C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
#include <cstdlib>
 
int main()
{
    setlocale (0, "rus");
    cout << "Русский текст";
 
    system ("pause>nul");
    return 0;
}
5
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.06.2013, 18:34

Русский текст в консоли
Мне нужно чтобы когда я напишу свое имя по русски и оно выводиться по русски у...

Русский текст в консоли
Проблема банальная - русский текст в консоли. До конца в кодировках я так и не...

Русский текст в консоли
Пользуюсь книгой для обучения visual с++, дан базовый код #include &lt;iostream&gt;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Закрытая тема Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru