Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 27, средняя оценка - 4.81
ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
#1

Юникод символ в консоли - C++

08.06.2013, 01:05. Просмотров 4201. Ответов 8
Метки нет (Все метки)

Здорова!
Есть вопрос, от можно ли в консоли как то вывести юникод символы? Допустим есть код символа в юникод U+2660 и как мне его вывести в консоли через программу?
Пробовал отак cout <<(char)(+2660)<<endl; выводит не тот символ, а если U добавляешь, то ошибка.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.06.2013, 01:05     Юникод символ в консоли
Посмотрите здесь:

C++ Выделить цветом символ в консоли
C++ Ошибка при отображении русских шрифтов в консоли: "error LNK2019: ссылка на неразрешенный внешний символ"
Как стереть символ в консоли C++
C++ Что-то не так в программе (при нажатии кнопок со стрелками по консоли движется символ)
C++ Как вывести символ бесконечности(∞) в консоли с помощью cout
C++ Юникод в консоли visual studio 2010?
Узнать какой отображён символ в консоли по координатам C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Dr_Quake
Заблокирован
08.06.2013, 04:09     Юникод символ в консоли #2
В винде нету юникода в консоли адекватно, там только хаком вида System(chcp 65001) и выводом конвертированного в UTF-8 как "обычной" строки, при том ещё шрифт надо сначала сменить на юникодный(вроде arial *) в окне, смотри в общем примеры конвертирования CharToOem в прилепленных и делай то же, но в UTF-8 или прямо свой UTF выводи, соответственно для w строк надо UTF-16 в UTF-8. В никсах спокойно выводится как угодно, но чтобы адекватно прямо из кода через U/wchar - setlocale надо сначала использовать.
Croessmah
Модератор
Эксперт CЭксперт С++
12891 / 7277 / 811
Регистрация: 27.09.2012
Сообщений: 17,976
Записей в блоге: 2
Завершенные тесты: 1
08.06.2013, 05:48     Юникод символ в консоли #3
В Visual Studio можно сделать так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <io.h>
#include <fcntl.h>
#include <Windows.h>
int main(){
 
    _setmode(_fileno(stdout), _O_U8TEXT);
    _setmode(_fileno(stdin), _O_U8TEXT);
    //SetConsoleCP(CP_UTF8);
    //SetConsoleOutputCP(CP_UTF8);
    wchar_t * str=L"Моя строка\x2660\n";
    std::wcout<<str<<std::endl;
    return 0;
}
Убежденный
Системный программист
Эксперт С++
15173 / 6805 / 1073
Регистрация: 02.05.2013
Сообщений: 11,121
Завершенные тесты: 1
08.06.2013, 11:25     Юникод символ в консоли #4
Croessmah, этот способ не будет работать на нерусских локализациях Windows,
если только явно не прописать русский язык для программ, не поддерживающих Unicode,
или не установить для консоли подходящий шрифт. Кстати, почему-то этот момент не
упомянут в известной теме Русские шрифты в консоли.
Croessmah
08.06.2013, 12:03
  #5

Не по теме:

Цитата Сообщение от Убежденный Посмотреть сообщение
этот способ не будет работать на нерусских локализациях Windows,
если только явно не прописать русский язык для программ
Про русский язык тут речи не идет

Убежденный
08.06.2013, 12:15
  #6

Не по теме:


Цитата Сообщение от Croessmah Посмотреть сообщение
Про русский язык тут речи не идет
Русский язык - лишь частный случай.
Речь о том, что не на всех локализациях Windows можно вывести произвольно
взятый символ Юникода, не проделав определенных манипуляций с параметрами
самой консоли или региональными настройками.

Я хотел подчеркнуть, что если вы пишете интернациональное приложение,
на переносимость данного способа рассчитывать нельзя.

Dr_Quake
Заблокирован
08.06.2013, 14:29     Юникод символ в консоли #7
Этот способ не работает. Вообще. Никак. Тот что я привёл тоже. Проверил все методы - нет, ввыводятся символы ТОЛЬКО текущей non-unicode локали, так что считаем дружно что в винде невозможно в консоли выводить <8битной кодировки, шрифт менять на юникодный не помогает...

В общем нету в винде в консоли Unicode, и всё тут, только язык текущей локали, хоть в 8bit выводи, хоть в UTF16 - всё что не в локали будет ??? или другие символы. От этого очень давно уже FAR страдает.

Сразу же предлагаю способ обхода - rxvt-native из пака cygwin, у него при выставлении правильной локали и шрифта всё в порядке.
ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
08.06.2013, 21:36  [ТС]     Юникод символ в консоли #8
Dr_Quake, Да работает я проверял
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.06.2013, 22:22     Юникод символ в консоли
Еще ссылки по теме:

C++ Вывести символ квадрата в консоли
Не отображается символ Юникода в консоли C++
Как заставить символ двигаться по консоли? C++
C++ Цикл: каждый символ символьного массива вывести на новой строке консоли
C++ Почему если в консоли ввести вместо числа любой символ, программа впадает в бесконечный цикл?

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Dr_Quake
Заблокирован
08.06.2013, 22:22     Юникод символ в консоли #9
Проверь с русским и китайским, например, одновременно - поймёшь в чём суть.
Yandex
Объявления
08.06.2013, 22:22     Юникод символ в консоли
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru