Вывод в консоль русских символов
Про CharToOem знаю,но использовать не хочу,потому как негибко.Что самое интересно,С++овские setlocale/cout как-то умудряются заработать(правда,тоже не каждый раз)
HConsoleOutput : THandle;
StrBuffer : CHAR_INFO;
_C,_C1 : _COORD;
_SR : _SMALL_RECT;
...
HConsoleOutput := GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleoutputCP(1251);
...
WriteConsoleOutput(HConsoleOutput, @StrBuffer, _C, _C1, _SR);
Если понадобится редактировать шрифт программно, то клац, но там функции не совсем документированы, проверял только на ХР. Посмотри сколько шрифтов в системе и найди индекс нужного тебе.
Also, @pixo $oft, не ожидал от тебя такого вопроса.
А вот так!Одно и тоже выводится при разных значениях wCodePage.К тому же,вывожу я просто через WriteConsole/WriteFile,к чему мне там такую сложную структуру городить :)
Ага,где-то прочёл,мол,это работает,только если Lucida Console установлена.Вообще,это немного неудобно
Почему тогда setlocale/cout работают в паре?Как они устроены?
Пытался поотлаживать и найти заветный вызов,но это нельзя отлаживать ©__©
P.S.Вопрос как вопрос,с кем не бывает.Просто перекодировать каждый раз на лету(или не дай бог писать строчки в другой кодировке)—маразм ещё тот
Да только на моей памяти было как минимум два топика по этой теме и, насколько я могу не забыть, оригинального и простого решения для этой проблемы не нашли.
Предлагаю посмотреть. Клац.По адресу 0046F019 находится буфер, который будет выводиться на экран. С 75B177F3 начинается сам вывод на экран. Странно, что они по одному символу до мультибайта расширяют и выводят. Кстати, вызовом setlocale в этом месте и не пахнет. Там есть проверка, в какой кодировке консолька и функция возвращает 866. Что меняется без setlocale я не смотрел.
Код приложения:
#include <locale>
#include "windows.h"
using namespace std;
int main()
{
char* str = "парм-пам-пам";
setlocale(LC_ALL,"");
cout << str;
return 0;
}
Вообще,setlocale должна вызываться в одном месте же,а не при каждом выводе.Короче,я смущён и расстроен,особливо тем фактом,что