Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.67/15: Рейтинг темы: голосов - 15, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 25.07.2020
Сообщений: 150

Unicode

25.07.2020, 20:14. Показов 3410. Ответов 36
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нужна функция которая переобразует строку, в юникод строку, что бы все символы из той строки были в юникод символы
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.07.2020, 20:14
Ответы с готовыми решениями:

C++ и Unicode
Всем привет. Читая про кодовые точки в Java, мне стало интересно как с этим дела в C++. Т.е. для обычного ASCII мы используем char (1...

Unicode в c++
Нужно вывести в консоли символ: \ Просто так сделать это нельзя, решил использовать Unicode. Код символа в Unicode : \u005C Как...

ANSI и UNICODE
#include <iostream> #include <windows.h> using namespace std; int main(){ TCHAR j; return 0;

36
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
29.07.2020, 21:11
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Dhdbdb Посмотреть сообщение
Нужна функция которая переобразует строку, в юникод строку, что бы все символы из той строки были в юникод символы
C++
1
2
3
4
5
6
7
std::wstring to_wstring(const std::string &src, const std::locale &loc = std::locale())
{
    std::wstring dst(src.size(), 0);
    auto *p = std::use_facet<std::ctype<wchar_t>>(loc).widen(src.c_str(), src.c_str() + src.size(), dst.data());
    dst.resize(p - src.c_str());
    return dst;
}

C++
1
2
3
4
        std::wcout << to_wstring("ывваппрррФЫВЫВАААп", std::locale("Russian")) << std::endl;
        
        std::locale::global(std::locale("Russian"));
        std::wcout << to_wstring("ывваппрррФЫВЫВАААп") << std::endl;
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
29.07.2020, 22:14
Цитата Сообщение от Renji Посмотреть сообщение
Точно также в utf16 с суррогатными парами (нам очень хотелось запихать в 16-битовую кодировку миллион символов). Точно также в utf32 с его символами-Лего, собирающимися из нескольких char32_t.
Я говорил "проще" и то что реально можно пощупать и понять.
0
 Аватар для COKPOWEHEU
4083 / 2681 / 432
Регистрация: 09.09.2017
Сообщений: 11,910
30.07.2020, 10:53
Цитата Сообщение от Avazart Посмотреть сообщение
лишает возможности быстро обращаться к тому или иному символу по индексу
А настолько ли это существенная проблема?
При автоматической обработке текста важно скорее копирование строки или ее части, преобразование в верхний-нижний регистр, сравнение.
При ручной разве что подсчет количества символов или выделение "где-то отсюда досюда", но там скорость не так критична, все-таки работа ведется с человеком. Да и символы используются не моноширинные, так что просто по координатам не посчитать.
Просто действительно не изобретал развесистые текстовые редакторы. Максимум - аналог поля ввода на SDL, где удаление бэкспейсом 1 байта utf-8 приводило к интересным последствиям.
Цитата Сообщение от MasterOfAlteran Посмотреть сообщение
И именно UTF-32 всегда имеет только один code-unit.
Так все же что с диактрическими символами? Некоторый софт считает их отдельными, некоторый составными.
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
30.07.2020, 11:13
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
А настолько ли это существенная проблема?
Существенная учитывая что нет никаких готовых решений.

Добавлено через 44 секунды
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
При автоматической обработке текста важно скорее копирование строки или ее части, преобразование в верхний-нижний регистр, сравнение.
И как Вы собираетесь это делать не знает где какой символ?
Нет конечно можно разобраться с юникодом где какие префиксы и анализировать байты, но зачастую проще сконвертить в UTF16(или 32) и там работать по-символьно.
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
30.07.2020, 11:20
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
При автоматической обработке текста важно скорее копирование строки или ее части, преобразование в верхний-нижний регистр, сравнение.
Проблемы только с копированием части строки. Преобразование, toupper/tolower, вроде нормально работают с utf-8, сравнение тем более.
Естественно, в редакторах лучше работать с юникодом. В остальных случаях - не факт.
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
30.07.2020, 11:52
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Преобразование, toupper/tolower, вроде нормально работают с utf-8
А если нужно "капитализировать" т.е. взять первую букву в слове и привести ее к верхнему регистру?

Или у Вас текст на русском и нужно сплитировать его по буквам "ё" как это делать?
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
30.07.2020, 11:58
Цитата Сообщение от Avazart Посмотреть сообщение
А если нужно "капитализировать" т.е. взять первую букву в слове и привести ее к верхнему регистру?
"Капитализируешь" все байты из которых состоит первая буква. В мультибайтовой кодировке обычно не работают с символами, работают со строкой. Когда тебе нужно работать отдельными с символами, как в редакторе, тогда конвертируешь в юникод.
Цитата Сообщение от Avazart Посмотреть сообщение
Или у Вас текст на русском и нужно сплитировать его по буквам "ё" как это делать?
Никак. Просто не делай текст с такими разделителями, используй точку с запятой.
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
30.07.2020, 12:12
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
В мультибайтовой кодировке обычно не работают с символами, работают со строкой.
Я об это и говорю что это сильно усложняет работу с текстом.
И можно было иметь стандартную библиотеку для работы с utf-8, но её нет.
Например какой нибудь utf8_simbol_iterator и utf8_file_reader.
(Ведь с чтением файлов частями тоже проблема.)

Добавлено через 1 минуту
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Никак. Просто не делай текст с такими разделителями, используй точку с запятой.
Я может хочу "ё" и вот ты хоть лопни
А если серьезно есть куча юникодных псевдо-графических символов в теории по которым может быть разбиение.

Добавлено через 5 минут
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
тогда конвертируешь в юникод.
Со всеми последствиями в виде падения производительности.
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
30.07.2020, 12:24
Цитата Сообщение от Avazart Посмотреть сообщение
Со всеми последствиями в виде падения производительности.
Это другое. Я ж не говорю, что ты кровь-из-носу должен использовать многобайтовую кодировку. Используешь, то что тебе выгодно.
При этом в подавляющем количестве задач используются просто сравнение строк, поиск подстроки, преобразование в нижний/верхний регистр, сохранение в файл и вывод на экран. Со всем этим прекрасно справляется utf-8. Причём в линуксе она является кодировкой по-умолчанию, и что-то никто не жалуется.
Цитата Сообщение от Avazart Посмотреть сообщение
Я может хочу "ё" и вот ты хоть лопни
Ну что тут сказать? Протрезвей.
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
30.07.2020, 13:00
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
и что-то никто не жалуется.
Так же можно говорить про винду, в винде ни так и тоже никто не жалуется...
Речь про то что не все так просто.
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
30.07.2020, 15:59
Цитата Сообщение от Avazart Посмотреть сообщение
Так же можно говорить про винду, в винде ни так и тоже никто не жалуется...
Речь про то что не все так просто.
Проще, чем кажется.
В винде как раз постоянно жалуются, не знают как русские символы в консоль вывести.
Там проблема в том, что она исторически работает либо с тяжелым юникодом, либо с убогим ascii, который устарел лет 25 как.
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
30.07.2020, 16:10
Можно возразить что консоль под виндой не нужна никому, и устарела лет так ...

Как ни крути Qt и Python представление строк все равно держит в двухбайтовых символах, а не utf-8.
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
30.07.2020, 16:29
Цитата Сообщение от Avazart Посмотреть сообщение
Можно возразить что консоль под виндой не нужна никому, и устарела лет так ...
С сообщениями и вызовами winapi проблем ещё больше, там ещё зачастую надо явно преобразовывать к LPARAM.

Добавлено через 10 минут
За примером, кстати, далеко ходить не пришлось, причём типичным Получение инофрмации об, ос, памяти, процессоре, количество системных дисков и названия дисков
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
30.07.2020, 16:43
Надуманная проблема, не нужно ничего преобразовывать. Не нужно просто явно указывать "A" версию и трогать макросы.

Вместо OSVERSIONINFOEXA просто указывать OSVERSIONINFOEX и так везде.
Имею ввиду GetVersionEx(). Все по умолчанию работает с wchar_t.
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
30.07.2020, 16:48
Цитата Сообщение от Avazart Посмотреть сообщение
Надуманная проблема, не нужно ничего преобразовывать. Не нужно просто явно указывать "A" версию и трогать макросы.
Любая проблема надуманная, нужно всего лишь программировать хорошо и не делать ошибок.
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
30.07.2020, 16:52
Это явна и глупая ошибка программиста, когда программист пихает ф-цию параметры которые совсем не то что в определении этой ф-ции.


Как с выводом на в окна информации я никогда не имел проблем.
Касательно с консоли там проблема не с выводом, а с вводом при чем скорее всего именно в реализации стандартной библиотеки ибо через WriteConsole()/ReadConsole() все вроде нормально работает.
0
 Аватар для COKPOWEHEU
4083 / 2681 / 432
Регистрация: 09.09.2017
Сообщений: 11,910
31.07.2020, 14:44
Цитата Сообщение от Avazart Посмотреть сообщение
И как Вы собираетесь это делать не знает где какой символ?
Это-то решается поиском подстроки в строке. Если нам надо, скажем, распарсить введенное пользователем ФИО на три строки, достаточно сделать поиск по пробелу и копировать до него. Точное количество символов тут ничего не даст.
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Преобразование, toupper/tolower, вроде нормально работают с utf-8
Гарантировать не буду, но вроде бы были проблемы.
Цитата Сообщение от Avazart Посмотреть сообщение
Или у Вас текст на русском и нужно сплитировать его по буквам "ё" как это делать?
А в чем проблема? Буква 'ё' это строка из двух символов, по ней и ищите. То есть поиск не по символу, а по строке.
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Там проблема в том, что она исторически работает либо с тяжелым юникодом, либо с убогим ascii, который устарел лет 25 как.
Хуже. Там современным считается UTF-16, который ни с ASCII не совместим как UTF-8, ни всех символов в одной единице хранить не может как UTF-32. Либо, что еще хуже, локальные кодировки вроде cp1251.
Цитата Сообщение от Avazart Посмотреть сообщение
Можно возразить что консоль под виндой не нужна никому, и устарела лет так ...
Будь оно так, не появлялись бы новости "ого, мы выпустили новый терминал, с эмодзями", "ого, мы допиливаем powershell, уже почти достигли удобства bash'а".
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
31.07.2020, 14:44
Помогаю со студенческими работами здесь

ANSI to Unicode
Hi all. Вопрос к экспертам :) Хочу сохранить строку текста (кириллица) в текстовый файл. Строка в ANSI, а нужно сконвертировать в...

ANSI to Unicode
Всем доброго времени суток! Есть задачка преобразовать строку в cp1251 в строку в unicode и сохранить ее в файл в кодировке unicode...

Unicode символы
Здравствуйте.Каким образом можно вывести на экран символы unicode?

Преобразование в Unicode
Как преобразовать тип Buffer ,чтобы не было ошибки: error C2664: int CEdit::GetLine(int,LPTSTR,int) const: невозможно преобразовать...

From UTF-8 to UNICODE
здравствуйте!! у меня вот какой вопрос! Как сделать преобразование UTF-8 и Unicode? во общем моя программа считывает данные с базы( база...


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

Или воспользуйтесь поиском по форуму:
37
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG-файла с альфа-каналом с помощью библиотеки SDL3_image на Android
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru