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

Ваш аккаунт

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

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

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

Вывод в консоль русских символов

7
17 февраля 2012 года
@pixo $oft
3.4K / / 20.09.2006
Как сделать,если оригинал в Win1251?SetConsoleOutputCP не помогает(совсем никакого эффекта),SetFileApisANSI/OEM—то же самое
Про CharToOem знаю,но использовать не хочу,потому как негибко.Что самое интересно,С++овские setlocale/cout как-то умудряются заработать(правда,тоже не каждый раз)
14K
17 февраля 2012 года
dsoft
36 / / 08.06.2006
Шутишь, как не помогает?
 
Код:
var
  HConsoleOutput    : THandle;
  StrBuffer     : CHAR_INFO;
  _C,_C1 : _COORD;
  _SR    : _SMALL_RECT;
...
  HConsoleOutput := GetStdHandle(STD_OUTPUT_HANDLE);
  SetConsoleoutputCP(1251);
...
  WriteConsoleOutput(HConsoleOutput, @StrBuffer, _C, _C1, _SR);

316
17 февраля 2012 года
Alm3n
889 / / 29.05.2009
А ты посмотри, какой у тебя шрифт стоит.
Если понадобится редактировать шрифт программно, то клац, но там функции не совсем документированы, проверял только на ХР. Посмотри сколько шрифтов в системе и найди индекс нужного тебе.
Also, @pixo $oft, не ожидал от тебя такого вопроса.
7
17 февраля 2012 года
@pixo $oft
3.4K / / 20.09.2006
Цитата: dsoft
Шутишь, как не помогает?

А вот так!Одно и тоже выводится при разных значениях wCodePage.К тому же,вывожу я просто через WriteConsole/WriteFile,к чему мне там такую сложную структуру городить :)

Цитата: Alm3n
А ты посмотри, какой у тебя шрифт стоит

Ага,где-то прочёл,мол,это работает,только если Lucida Console установлена.Вообще,это немного неудобно
Почему тогда setlocale/cout работают в паре?Как они устроены?
Пытался поотлаживать и найти заветный вызов,но это нельзя отлаживать ©__©

P.S.Вопрос как вопрос,с кем не бывает.Просто перекодировать каждый раз на лету(или не дай бог писать строчки в другой кодировке)—маразм ещё тот

316
18 февраля 2012 года
Alm3n
889 / / 29.05.2009
Цитата: @pixo $oft
P.S.Вопрос как вопрос,с кем не бывает.Просто перекодировать каждый раз на лету(или не дай бог писать строчки в другой кодировке)—маразм ещё тот


Да только на моей памяти было как минимум два топика по этой теме и, насколько я могу не забыть, оригинального и простого решения для этой проблемы не нашли.

Цитата: @pixo $oft
Почему тогда setlocale/cout работают в паре?Как они устроены?


Предлагаю посмотреть. Клац.По адресу 0046F019 находится буфер, который будет выводиться на экран. С 75B177F3 начинается сам вывод на экран. Странно, что они по одному символу до мультибайта расширяют и выводят. Кстати, вызовом setlocale в этом месте и не пахнет. Там есть проверка, в какой кодировке консолька и функция возвращает 866. Что меняется без setlocale я не смотрел.
Код приложения:

Код:
#include <iostream>
#include <locale>
#include "windows.h"

using namespace std;

int main()
{
    char* str = "парм-пам-пам";
    setlocale(LC_ALL,"");
    cout << str;
    return 0;
}


7
18 февраля 2012 года
@pixo $oft
3.4K / / 20.09.2006
Ооо,address level debugging!
Вообще,setlocale должна вызываться в одном месте же,а не при каждом выводе.Короче,я смущён и расстроен,особливо тем фактом,что
Цитата: Alm3n
…было как минимум два топика по этой теме и…оригинального и простого решения для этой проблемы не нашли

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог