Эксперт С++
 Аватар для CyBOSSeR
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675

cout и Unicode - как выводить широкие символы

06.03.2009, 16:22. Показов 7651. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Решил перевести свое консольное приложение на Unicode и столкнулся с такой проблемой:
C++
1
 cout << L"TestString";
Итогом данного оператора является строка что-то типа "00417B68".
Хотелось бы узнать в чем дело, как выводить широкие символы с помощью cout?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
06.03.2009, 16:22
Ответы с готовыми решениями:

Широкие символы + Unicode
Доброго времени суток всем) На эту тему материала много, но он весь разрозненный и не полный. Хотелось бы всё узнать о представлении...

Широкие символы wchar_t wstring не хотят принимать русские символы
Собственно вопрос в шапке, вот примеры: std::wstring str = L&quot;блин комом&quot;; и такое: wchar_t stroka = L&quot;abcdefghijklmnopqrstuvwxyz...

Как выводить строки в unicode?
почему не выводит на экран строки в формате unicode? в win32 прикрасно работает, а в консоле не выводит... #include &lt;iostream&gt; ...

8
Maniac
Эксперт С++
 Аватар для ISergey
1464 / 965 / 160
Регистрация: 02.01.2009
Сообщений: 2,820
Записей в блоге: 1
06.03.2009, 16:26
думаю так
C++
1
std::wcout<<L"TestString"<<std::endl;
1
Эксперт С++
 Аватар для CyBOSSeR
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
06.03.2009, 16:38  [ТС]
Цитата Сообщение от ISergey Посмотреть сообщение
думаю так
C++
1
std::wcout<<L"TestString"<<std::endl;
Хорошо, с широкими символами понятно.
Развиваем тему:
Хотелось бы использовать макрос _T и тип данных TCHAR, чтобы вывод работал вне зависимости от того определена ли константа UNICODE.
Если что-нибудь типа tcout?
Конечно можно определить макрос tcout, но хотелось бы использовать только стандартные вещи.
0
Maniac
Эксперт С++
 Аватар для ISergey
1464 / 965 / 160
Регистрация: 02.01.2009
Сообщений: 2,820
Записей в блоге: 1
06.03.2009, 17:00
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Конечно можно определить макрос tcout
Наверно так будет проще.
0
Эксперт С++
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
06.03.2009, 21:32
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Хотелось бы использовать макрос _T и тип данных TCHAR,
........ но хотелось бы использовать только стандартные вещи.
Эти два утверждения противоречат друг другу.
0
Эксперт С++
 Аватар для CyBOSSeR
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
07.03.2009, 11:25  [ТС]
Цитата Сообщение от CheshireCat Посмотреть сообщение
Эти два утверждения противоречат друг другу.
Под стандартными вещами я подразумеваю вещи находящиеся в стандартных заголовочных файлах (но не в SDK). _T и _TCHAR относится как раз таки к таким вещам.
Да не в этом дело. Почему нет аналога cout, который смог бы в зависимости от определения _UNICODE выводить либо широкие либо обычные символы. Просто мне не очень понятна причина по которой данный аналог отсутствует, а для printf и прочих функций из stdio.h есть...
Получается единственный выход из ситуации это:
C++
1
2
3
4
5
6
7
8
9
10
11
#ifdef _UNICODE
#define _tcout wcout
#define _tcin wcin
#define _tifstream wifstream
#define _tofstream wofstream
#else
#define _tcout cout
#define _tcin cin
#define _tifstream ifstream
#define _tofstream ofstream
#endif
Так что ли?
0
Эксперт С++
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
07.03.2009, 14:22
В том-то и штука, что ни _T, ни _TCHAR к стандартным не относятся. Это - Microsoft-specific макросы, отпределенные в их же, майкрософтовских заголовках.
Если ты имеешь в виду функции типа _tprintf() - то это опять-таки MS-specific макросы, определенные в их же, MS-овских заголовках; Стандарт же предоставляет тебе пару функций printf() и wprintf(), и ровно точно так же - пару потоков cout и wcout. А почему в MS не определили макрос типа _tcout - этот вопрос стоит адресовать к MS....
1
Эксперт С++
 Аватар для CyBOSSeR
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
08.03.2009, 19:48  [ТС]
Цитата Сообщение от CheshireCat Посмотреть сообщение
В том-то и штука, что ни _T, ни _TCHAR к стандартным не относятся. Это - Microsoft-specific макросы, отпределенные в их же, майкрософтовских заголовках.
Если ты имеешь в виду функции типа _tprintf() - то это опять-таки MS-specific макросы, определенные в их же, MS-овских заголовках; Стандарт же предоставляет тебе пару функций printf() и wprintf(), и ровно точно так же - пару потоков cout и wcout. А почему в MS не определили макрос типа _tcout - этот вопрос стоит адресовать к MS....
Да что-то я ступил
Как будет лучше сделать:
1. Прописывать макросы, аналогичные приведенным мною выше.
2. На основе basic_ostream и basic_istream создавать собственные потоки ввода - вывода, и во всех сторонних модулях объявлять их как extern.
Какой вариант лучше?
0
16 / 16 / 2
Регистрация: 08.05.2009
Сообщений: 81
08.05.2009, 17:15
я бы реализовал собственные потоки ввода-вывода, хотя не занимался этим и мне трудно что-то умное сказать насчет эффективности.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
08.05.2009, 17:15
Помогаю со студенческими работами здесь

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

Не получается вывести широкие символы
wchar_t *p = new wchar_t; p = L&quot;Текст&quot;; wcout &lt;&lt; p &lt;&lt; endl;

Широкие символы в Code Blocks
Code Blocks 13.12, mingw 4.7.1, почему не проходит компиляция такого кода? #include &lt;iostream&gt; using namespace std; int main() ...

Как использовать символы Unicode
Здрасьте!Я не понимаю как перейти на Unicode, работаю в VS2017. Можно ли это сделать через setlocale();?

Как сосчитать символы в js побайтово в unicode?
к примеру есть строка &quot;Привет мир&quot; полученая в php с помощю функции serialize в результате получится чтото вроде ...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru