Форум программистов, компьютерный форум, киберфорум
Наши страницы
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
koros
1 / 1 / 1
Регистрация: 14.11.2014
Сообщений: 29
1

Кодировка в консоли

17.04.2015, 10:07. Просмотров 1905. Ответов 7
Метки нет (Все метки)

Комментарий к посту "Кодировка в консоли"

Цитата Сообщение от Dragokas Посмотреть сообщение
Недостатком 1-го способа является то, что сообщения от всех системных команд написаны в кодировке CP-866.
И если воспользоваться командой chcp 1251, мы получим "крякозябры" уже от встроенных команд.
Избежать этого можно, если в настройках консоли выбрать шрифт TrueType, например Lucida Console/
Цитата Сообщение от Dragokas Посмотреть сообщение
Кодовые страницы, поддерживаемые CMD.
Хочется добавить, что ещё есть 65001, но при использовании команды chcp 65001 (utf-8) батник прекращает свою работу. Для предотвращения этого надо использовать команды показанные здесь
1
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.04.2015, 10:07
Ответы с готовыми решениями:

Кодировка консоли
Добрый день. Не удается мне понять, что не так. Как только я не игрался с setLocale и...

Кодировка в консоли(C)
Здравия Я к вам с очередной проблемой:)Читал сейчас тему русские шрифты в консоли и задался...

Кодировка в консоли VS
Здравствуйте! Проблема вот в чём: Необходимо, чтобы текст отображался точно также, как в...

Кодировка в консоли
Добрый день , имея некоторый опыт программирования на c# решил так же изучить С++, однако при...

Кодировка output-консоли
Доброго времени суток. При сборке (в нижней консольной вкладке Проблемы) запорота кодировка. Мне...

7
Smitis
1630 / 339 / 41
Регистрация: 15.10.2012
Сообщений: 531
17.04.2015, 15:12 2
Цитата Сообщение от koros Посмотреть сообщение
Хочется добавить, что ещё есть 65001, но при использовании команды chcp 65001 (utf-8) батник прекращает свою работу. Для предотвращения этого надо использовать команды показанные здесь
Надо просто создавать батник без BOM.
0
koros
1 / 1 / 1
Регистрация: 14.11.2014
Сообщений: 29
21.04.2015, 09:14  [ТС] 3
Цитата Сообщение от Smitis Посмотреть сообщение
Надо просто создавать батник без BOM.
Подскажите, пожалуйста, как это сделать, например, в стандартном Блокноте Windows при сохранении в ANSI?
0
Smitis
1630 / 339 / 41
Регистрация: 15.10.2012
Сообщений: 531
22.04.2015, 11:10 4
Цитата Сообщение от koros Посмотреть сообщение
Подскажите, пожалуйста, как это сделать, например, в стандартном Блокноте Windows при сохранении в ANSI?
Через... одно место.
Сохраняем батник в UTF-8 (через "Сохранить как..."). Он сохранится с BOM.
Редактируем его и т.д., сохраняем.
Далее меню / Открыть (Ctrl-O), выбираем файл, выбираем кодировку ANSI, открываем.
Удаляем первые три символа, выглядящие как п»ї (это и есть BOM), сохраняем. Будет работать, но русский текст будет нечитаемым.
При повторном открытии и редактировании блокнот может опять вернуть кодировку и BOM.
Лучше использовать нормальный редактор, нормально работающий с кодировками (AkelPad, Notepad++, etc)
1
22.04.2015, 11:10
koros
1 / 1 / 1
Регистрация: 14.11.2014
Сообщений: 29
22.04.2015, 19:06  [ТС] 5
Smitis,
Вы, наверное, не внимательно прочитали мой вопрос. Я не говорю про UTF-8. Я говорю про ANSI.
Батники наиболее часто записывают в ANSI или 866. Насколько я знаю, там нет BOM.
Стандартный Блокнот я привел для примера. Сам пользуюсь AkelPad. Просто Блокнот входит в стандартную поставку Windows и многие его используют. Если я не ошибаюсь, то он по умолчанию сохраняет в ANSI.
Но даже и это не важно. Вы писали что из батника можно выполнить команду "chcp 65001", не вызывая прерывания его работы. Для этого:
Цитата Сообщение от Smitis Посмотреть сообщение
Надо просто создавать батник без BOM.
Пожалуйста сделайте батник со следующим кодом:
Windows Batch file
1
2
3
chcp 65001
echo It`s working
pause
сохраните его в любой кодировке и посмотрите на его работу.

И немного по поводу вашей методики:
Цитата Сообщение от Smitis Посмотреть сообщение
Удаляем первые три символа, выглядящие как п»ї (это и есть BOM), сохраняем.
Сохраняем в какой кодировке?
0
Dragokas
Эксперт WindowsАвтор FAQ
17093 / 7148 / 861
Регистрация: 25.12.2011
Сообщений: 10,954
Записей в блоге: 16
22.04.2015, 20:13 6
Давайте я выступлю в качестве третейского судьи )

Есть разные способы сделать так, чтобы с помощью батника создать новый текстовый файл с русским текстом в кодировке UTF-8.
Это зависит от того, в какой кодировке сохранен сам батник.

1) Как предложил Smitis, можно сам батник сохранить в UTF-8 без BOM,
тогда простая строка:

Bash
1
echo Это для проверки > 1.txt
создаст файл 1.txt в UTF-8 без BOM.
Из минусов: собственные сообщения вида echo Привет будут выводится в консоль некорректно,
хотя внутренние сообщения от команд вполне читабельны.

2) Вариант amel27.
Здесь батник сохранен в кодировке OEM (cp866).

Магия заключается именно в однострочной команде с использованием канала:

Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@Echo On
 
Set CFG=config.txt
 
Set LN1=;!@Install@!UTF-8!
Set LN2=;Это для проверки.
Set LN3=RunProgram="StartX.exe /WAIT \"msiexec /i Adobe7.msi /qn\""
Set LN4=;!@InstallEnd@!
 
CHCP 65001>NUL | (
  Echo %LN1%
  Echo %LN2%
  Echo %LN3%
  Echo %LN4%) > "%CFG%" & CHCP 866>NUL
pause
Создаст файл config.txt с UTF-8 без BOM.

При попытке заменить знак канала на & получим испорченные данные на месте символов кириллицы.


Post Scriptum:

Цитата Сообщение от koros Посмотреть сообщение
Пожалуйста сделайте батник со следующим кодом:
Bash
1
2
3
chcp 65001
echo It`s working
pause
В ANSI "валится" в системе XP. На Win7 работает нормально, из-за этого и все заморочки (см. п.2).
2
koros
1 / 1 / 1
Регистрация: 14.11.2014
Сообщений: 29
22.04.2015, 20:28  [ТС] 7
Цитата Сообщение от Dragokas Посмотреть сообщение
В ANSI "валится" в системе XP.
И не только в ANSI.
Именно это я и указал в первоначальном посте. Лекарство - там же. Создание батника в другой кодировка - не помогает. Именно это я и пытаюсь объяснить.
А как создавать текстовые файлы - это совсем из другой оперы и к моему первоначальному посту отношения не имеет. Предлагаю прекратить обсуждение создания файла в разных кодировках. И признать, что, по крайней мере на ХР, смена кодировки батника не влияет на вылет его после команды "chcp 65001"
0
Smitis
1630 / 339 / 41
Регистрация: 15.10.2012
Сообщений: 531
22.04.2015, 21:00 8
Цитата Сообщение от koros Посмотреть сообщение
Вы, наверное, не внимательно прочитали мой вопрос. Я не говорю про UTF-8. Я говорю про ANSI.
Цитата Сообщение от koros Посмотреть сообщение
Хочется добавить, что ещё есть 65001, но при использовании команды chcp 65001 (utf-8) батник прекращает свою работу. Для предотвращения этого надо использовать команды показанные здесь
Возможно я не так понял. Чтобы использовать в батнике 65001 (UTF-8) батник тоже должен быть в кодировке UTF-8. Но без BOM. И шрифт для консоли тоже должен быть юникодным (Lucida Console и др). Если в батнике не будет юникодных символов (занимающих более одного байта, например, русских букв), он ничем не будет отличаться от ANSI. В любом случае его можно открывать как блокнотом как ANSI, просто юникодный текст будет нечитаемым. Иначе использовать chcp 65001 бессмысленно.
Пожалуйста сделайте батник со следующим кодом:
У меня в Win7 работает. Как оказалось, под XP - нет.
0
22.04.2015, 21:00
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.04.2015, 21:00

Кодировка символов в консоли
Напомните ещё один способ установки кодовой страницы в консоли для визуал студии, по крайней мере...

Кодировка в консоли (на ЕГЭ)
В этом году буду писать экзамен, но дело в том, что в visual studio setlocale(LC_ALL,"Rus"); не...

Неправильная кодировка в консоли
#include "stdafx.h" #include <iostream> using namespace std; const int strsize = 20; int main()...


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

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

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