Консультация № 186878
28.11.2012, 18:34
96.03 руб.
0 6 1
Здравствуйте! Прошу помощи в следующем вопросе:

#include <iostream>
#include "windows.h"
using namespace std;

int main()
{
setlocale(LC_ALL,"rus");

for(int i=0, j=1; i<255; ++i, ++j) {
cout << (char)i << " <-code: " << i << " | ";
if(j==5) {
cout << endl;
j=1;
}
}
system("PAUSE");
return 0;
}

если я использую функцию setlocate() для руссификации консоли, то пропадают некоторые симолы из псевдографики (рамки и т.д), что можно придумать что бы были все символы псевдографики?

Обсуждение

давно
Профессор
399103
482
28.11.2012, 20:40
общий
это ответ
Здравствуйте, виталий!

Используйте "широкие символы" - wchar.

Код:

#include <iostream>

int main()
{
setlocale(LC_ALL, ""); // устанавливаем системные локаль и кодовую страницу
std::wcout << static_cast<wchar_t>(0x2560) << L"текст" << static_cast<wchar_t>(0x2563) << std::endl;

return 0;
}


Вывод:
╠текст╣
Неизвестный
28.11.2012, 21:48
общий
у меня немного по другому вывелось: |текст|, твой вариант не помог, нужную мне псевдографику от 176 - 218 не хочет выводить вместо нее другие символы выводит, если отключить setlocale(), тогда нормально но нет кирилицы...
давно
Профессор
399103
482
28.11.2012, 21:55
общий
А попробуй явно кодовую страницу указать. Что-нибудь в духе
Код:
setlocale(LC_ALL, "ru_RU.UTF-8");
.

Как бы то ни было - спасение в wchar.
Неизвестный
28.11.2012, 22:09
общий
а какие еще кодовые страницы знаешь дай список попробую другие варианты я просто с этим никогда не сталкивался

если использовать этот вариант "ru_RU.UTF-8" :

std::wcout << "текст";
выводит аброкадабру,
а если так std::wcout << L"текст";
то ничего не выводит...
давно
Профессор
399103
482
28.11.2012, 22:26
общий
Посмотри вот здесь, например: http://cppstudy.wordpress.com/2009/02/04/cyrillic-console/

А wcout на "текст" и должен выводить ерунду - он же ожидает строку, символ которой занимает больше байта, а получает однобайтный. Для преобразования L и используется.
Неизвестный
29.11.2012, 06:19
общий
Можно ещё попробовать при выводе псевдографики переключаться обратно в английскую раскладку. Да, это будет немного напряжно, но зато должно работать.
Форма ответа