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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 27, средняя оценка - 4.81
ninja2
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
08.06.2013, 01:05     Юникод символ в консоли #1
Здорова!
Есть вопрос, от можно ли в консоли как то вывести юникод символы? Допустим есть код символа в юникод U+2660 и как мне его вывести в консоли через программу?
Пробовал отак cout <<(char)(+2660)<<endl; выводит не тот символ, а если U добавляешь, то ошибка.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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
Модератор
Эксперт С++
 Аватар для Croessmah
11841 / 6820 / 771
Регистрация: 27.09.2012
Сообщений: 16,911
Записей в блоге: 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;
}
Убежденный
Системный программист
 Аватар для Убежденный
14208 / 6223 / 987
Регистрация: 02.05.2013
Сообщений: 10,368
Завершенные тесты: 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
 Аватар для 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++
Вывести строки, в которых символ «*» встречается не менее 2 раз и заменить символ «*» на символ «_» C++
C++ Вывести символ квадрата в консоли

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

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

Текущее время: 01:36. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru