Форум программистов, компьютерный форум, киберфорум
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/2423: Рейтинг темы: голосов - 2423, средняя оценка - 4.80
Эксперт WindowsАвтор FAQ
17996 / 7697 / 892
Регистрация: 25.12.2011
Сообщений: 11,470
Записей в блоге: 16
1

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

19.12.2012, 15:59. Показов 440299. Ответов 2

Author24 — интернет-сервис помощи студентам
Написав в блокноте 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. Использовать стороннее ПО.


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

Миниатюры
Вложения
Тип файла: zip RecodeToDOS.zip (361 байт, 2405 просмотров)
37
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.12.2012, 15:59
Ответы с готовыми решениями:

Русский текст в консоли
Пользуюсь книгой для обучения visual с++, дан базовый код #include <iostream> using std::cout;...

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

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

Кодировка, русский текст в консоли
Привет Ребята. Возник такой вопрос. Если создать новый проект в lazarus'e и написать к примеру в...

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

У Scite есть огромный недостаток, он не позволяет копировать тексты написанные в кодировке cp866.
Поэтому приходится пользоваться следующим батником:
Bash
1
clip < "%~1"
Продвинутые пользователи могут подключать батники и другие скрипты как плагины к Scite-Ru.
4
Эксперт WindowsАвтор FAQ
17996 / 7697 / 892
Регистрация: 25.12.2011
Сообщений: 11,470
Записей в блоге: 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
08.06.2013, 18:34
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.06.2013, 18:34
Помогаю со студенческими работами здесь

Русский текст в консоли (не одно и то же)
Здравствуйте. В прикрепленной выше темке нашел вот такую программу: #include&lt;iostream.h&gt;...

После компиляции в консоли не выводится русский текст
а подскажите такой вопрос.Писал в npp самую простенькую прогу public class HelloWorld { public...

Рисование ASCII кодами и русский текст в консоли
Всем добрый вечер. И вот такой вопрос есть. Сначала печатаю в консоли текст а под ним...

Как с консоли записать в файл русский текст
Как с консоли записать в файл русский текст? Если так, то пишется только английский: #include...


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

Или воспользуйтесь поиском по форуму:
3
Закрытая тема Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru