Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/39: Рейтинг темы: голосов - 39, средняя оценка - 5.00
Эксперт С++
 Аватар для CyBOSSeR
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675

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

06.03.2009, 16:22. Показов 7647. Ответов 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
Ответ Создать тему
Новые блоги и статьи
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, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru