и правильно!Текст программы Вы набирали в родном редакторе Visual Studio, используя кодовую страницу 1251, а вывод текста в консольном приложении идет с использованием кодовой страницы 866. Что же делать с этим безобразием? Как известно из любого безвыходного положенния есть по крайней мере 3 выхода. Рассмотрим их по-порядку.
Как насчет определения специализации для шаблона класса ostream ???
В специализации оператора << для const char * и char * вызывать конвертирование текста при помощи функции CharToOem.
Впрочем, это и не выход даже, а так, тупичок. Работает он только, если соблюдены 3 условия:
— Ваша программа будет работать только под Windows NT
— Для окна вашей программы будет всегда установлен шрифт Lucida Console
— Ваша программа никогда не будет работать в полноэкранном режиме — только в окне.
Если все эти 3 условия соблюдены, достаточно вставить вначале программы вызов функции SetConsoleOutputCP, задав в качестве параметра нужную нам кодовую страницу
От себя: на самом деле второе условие включает третье
Slicer
Специалист — это варвар, невежество которого не всесторонне :)
Re: Почему вместо русских букв в консольном приложении вывод
АК>Запускаете сей шедевр на исполнение и видите
АК>
АК>¦ЁштхЄ тёхь!
АК>
АК>и правильно!Текст программы Вы набирали в родном редакторе Visual Studio, используя кодовую страницу 1251, а вывод текста в консольном приложении идет с использованием кодовой страницы 866. Что же делать с этим безобразием? Как известно из любого безвыходного положенния есть по крайней мере 3 выхода. Рассмотрим их по-порядку.
Работаю в отделе локализации программ — руки поотбивал бы писателям в коде строк которые увидит пользователь, с особым садизмом сделал бы это с теми кто при этом использует символы отличные от ASCII.
String Table для чего сществует?
Я пишу в студии программу для терминала покупателя ( Cipher LAb CPT — 711 ). Для меня данная проблема актуальна, работать в студии и хочется и колется, но первый вариант как-то кривоват, подумываю о написании макроса для студии, который бы переводил символы из Win в Dos кодировку одним нажатием, или такое уже есть ? посоветуйте
PS: Компилятор syntech C ANSI и урезанный при этом, так что в этом случае всякие элементы высшего пилотажа с решением проблемы "внутри" кода исключены
S>и все дела...
... << RSDN@Home 1.1.0 stable >>
Re[3]: А почему нельзя воспользоваться SetConsoleOutputCP(12
Здравствуйте, Slicer [Mirkwood], Вы писали:
SM>Ну а почему бы pipes не воспользоваться, как я предлагал? Или этот компилятор даже APIшки напрямую юзать не позволяет?
Этот C компилятор "вещь в себе" ( слегка ANSI ), я собираю код в файл user.shx, а затем делаю download в device ( через rs232 ), ну и соответсвенно ни пайпов ни др. апи там не заюзать , теоретически можно реализовать в нем CharToOEM, но это имхо лишнее, негоже прошивку усложнять из-за среды разработки
SM>Slicer
... << RSDN@Home 1.1.0 stable >>
Re: Почему вместо русских букв в консольном приложении вывод
Здравствуйте! По ссылке http://www.ruslat.wm.ru/ ничего не открывается. В интернете много программ с таким же названием, но единственное, что они меняют, это картинка в правом нижнем углу. Что я делаю не так? Спасибо.
Re[2]: Почему вместо русских букв в консольном приложении вы
Здравствуйте, Olga____, Вы писали:
O__>По ссылке http://www.ruslat.wm.ru/ ничего не открывается.
помер вот то что у меня осталось — http://gzip.rsdn.ru/File/82/RusLat.rar
O__>В интернете много программ с таким же названием, но единственное, что они меняют, это картинка в правом нижнем углу. Что я делаю не так? Спасибо.
Если кто еще не знает, в VS .NET, не знаю в каком(у меня 2003), в меню File появился пункт "Advanced Save Options", в нем можно выбрать кодировку, в которой сохраняется исходник, что и есть решение всей проблемы. В выбранной кодировке сохраняются все файлы проекта.
Re: Почему вместо русских букв в консольном приложении вывод
В искустве летать есть один маленький секрет. Секрет этот в том,чтобы бросить себя изо всех сил на землю — и не попасть. Выберете погожий денек и попробуйте сами.
Re: Почему вместо русских букв в консольном приложении вывод
А еще можно пропускать через себя весь вывод.
Создать поток, в нем узнать и сохранить старый дескриптор для вывода на консоль (GetStdHandle)
Создать pipe и на через SetStdHandle установить его как вывод консоли.
Пришло чего-нибудь в pipe — делаем CharToOem и в "старый" вывод это дело.
Работает сразу в масштабе всего приложения.
В MSDN есть даже пример похожий. В нем только CharToOem не делают.
Может и будут косяки, но в целом, вроде, должно работать.
Re[2]: Почему вместо русских букв в консольном приложении вы
Это, действительно, на данный момент самое правильное решение в стиле С++. Передыдущий код, с перегрузкой оператора ввода, не решал проблему вывода
std::cout << std::string("Привет!");
В искустве летать есть один маленький секрет. Секрет этот в том,чтобы бросить себя изо всех сил на землю — и не попасть. Выберете погожий денек и попробуйте сами.
Здравствуйте, BOPOH_N, Вы писали:
BOP>Это, действительно, на данный момент самое правильное решение в стиле С++. Передыдущий код, с перегрузкой оператора ввода, не решал проблему вывода
Именно. Он затыкал пару частных случаев — а вариант, на который я дал ссылку, даёт решения для как угодно выводимых строк и символов.
--
wbr, Peter Taran
Re: Почему вместо русских букв в консольном приложении вывод
От:
Аноним
Дата:
19.02.08 11:50
Оценка:
Вроде всё делаю как написано, а никак не получается...
Не подскажите вчём дело? Лезет следующая ошибка.
У меня есть подозрения, что эта функция(CharToOEM) не поддерживается в 2005 версии VS.
Привожу скрин с ругнёй компилятора. http://pics.livejournal.com/necky_/pic/0008ycd3
Возможнонадо где-то подробнее описать эту функцию?
Re[2]: Почему вместо русских букв в консольном приложении вы