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

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

06.03.2009, 16:22. Показов 7715. Ответов 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
1465 / 966 / 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
1465 / 966 / 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
Ответ Создать тему
Новые блоги и статьи
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru