Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Изменение кодировки, используемой для отображения выводимого в консоль текста

28K
29 декабря 2008 года
Tirpitz
32 / / 05.05.2008
Как можно в программе задать кодировку для отображение текста, выводимого в консоль функциями printf() и т.п. Ведь при написании исходного кода в Microsoft Visual C++ используется кодировка 1251, а при выполнении программы, в консоли используется кодировка 866. И в результате вместо символа '<' в исходном коде, в консоли появляется символ 'Л'.

Вообще говоря, планируется перенаправлять вывод в файл (test.exe > test.txt), и в этом случае кодировка как раз и должна быть 1251. Но как сделать так, чтобы без перенаправления текст можно было прочитать в консоли? Или это несовместимые требования?
11
29 декабря 2008 года
oxotnik333
2.9K / / 03.08.2007
в поиске по слову кодировка вылазит ну просто неприличное количество сообщений
246
29 декабря 2008 года
GIZMO
1.8K / / 30.07.2004
Цитата: Tirpitz
Как можно в программе задать кодировку для отображение текста, выводимого в консоль функциями printf() и т.п. Ведь при написании исходного кода в Microsoft Visual C++ используется кодировка 1251, а при выполнении программы, в консоли используется кодировка 866. И в результате вместо символа '<' в исходном коде, в консоли появляется символ 'Л'.

Вообще говоря, планируется перенаправлять вывод в файл (test.exe > test.txt), и в этом случае кодировка как раз и должна быть 1251. Но как сделать так, чтобы без перенаправления текст можно было прочитать в консоли? Или это несовместимые требования?


CharToOEM?

28K
29 декабря 2008 года
Tirpitz
32 / / 05.05.2008
Цитата: oxotnik333
в поиске по слову кодировка вылазит ну просто неприличное количество сообщений


Согласен. Тема не нова. Но все ответы сводятся к двум:
- Перекодировать текст из 1251 в 866 функцией CharToOem()
или
- При написании исходного кода сразу использовать кодировку 866.
А меня интересовало, есть ли способ сказать консоли,что символ с кодом 0xС0 надо отображать в кодировке 1251 - как символ 'А'. Функция SetConsoleOutputCP(1251) не помогает.

11
29 декабря 2008 года
oxotnik333
2.9K / / 03.08.2007
Цитата: Tirpitz
Согласен. Тема не нова. Но все ответы сводятся к двум:
- Перекодировать текст из 1251 в 866 функцией CharToOem()
или
- При написании исходного кода сразу использовать кодировку 866.
А меня интересовало, есть ли способ сказать консоли,что символ с кодом 0xС0 надо отображать в кодировке 1251 - как символ 'А'. Функция SetConsoleOutputCP(1251) не помогает.


Зачем консоли что то говорить? работаешь в своей программе с какой удобно кодировкой, а когда надо вывести в консоль CharToOem

28K
29 декабря 2008 года
Tirpitz
32 / / 05.05.2008
Опять же, если использовать в программе test.exe перекодируемые функцией CharToOem() символы, то после перенаправления вывода в файл ("test.exe > test.txt"), получаем текстовый файл (test.txt) в кодировке 866. И ничего уже с ним не поделаешь (в смысле кодировки). Но ведь если запустить cmd.exe и набрать "сhсp 1251" а потом "test.exe", то что бы программа не выводила на консоль, консоль будет интерпретировать это в кодировке 1251. Отсюда возник вопрос: можно ли сразу в программе сказать "chcp 1251"?
11
29 декабря 2008 года
oxotnik333
2.9K / / 03.08.2007
Цитата: Tirpitz
Опять же, если использовать в программе test.exe перекодируемые функцией CharToOem() символы, то после перенаправления вывода в файл ("test.exe > test.txt"), получаем текстовый файл (test.txt) в кодировке 866. И ничего уже с ним не поделаешь (в смысле кодировки). Но ведь если запустить cmd.exe и набрать "сhсp 1251" а потом "test.exe", то что бы программа не выводила на консоль, консоль будет интерпретировать это в кодировке 1251. Отсюда возник вопрос: можно ли сразу в программе сказать "chcp 1251"?


ShellExecute не спасет отца русской демократии?

28K
29 декабря 2008 года
Tirpitz
32 / / 05.05.2008
Пробовал system("chcp 1251") - не помогает. Так же как и system("mode con cp select=1251"). Да и так вообще не годится работать.
1
29 декабря 2008 года
kot_
7.3K / / 20.01.2000
Вы можете установить конкретную кодовую страницу для стандартного потока вывода.
28K
30 декабря 2008 года
Tirpitz
32 / / 05.05.2008
Цитата:
Вы можете установить конкретную кодовую страницу для стандартного потока вывода.


Звучит обнадеживающе... Может удастся разобраться как это делается. Как это делается именно в C, не C++.

1
30 декабря 2008 года
kot_
7.3K / / 20.01.2000
Блин - у меня жесткое впечатление что в гугле не забанены только некоторые участники этого форума. Почему так? Это происки деда мороза? :)
Я честно говоря хз как там для C - в конце концов это ведь вам надо - но изменение локали потока ввода:
 
Код:
std::cout.imbue( std::locale("ru_RU") );

или чтото типа этого. За более подробной информацией смотрите Страуструпа.
В конце концов используйте команду chcp
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог