0 / 0 / 0
Регистрация: 25.07.2020
Сообщений: 150

Unicode

25.07.2020, 20:14. Показов 3614. Ответов 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
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
29.07.2020, 22:14
Цитата Сообщение от Renji Посмотреть сообщение
Точно также в utf16 с суррогатными парами (нам очень хотелось запихать в 16-битовую кодировку миллион символов). Точно также в utf32 с его символами-Лего, собирающимися из нескольких char32_t.
Я говорил "проще" и то что реально можно пощупать и понять.
0
 Аватар для COKPOWEHEU
4090 / 2688 / 432
Регистрация: 09.09.2017
Сообщений: 11,956
30.07.2020, 10:53
Цитата Сообщение от Avazart Посмотреть сообщение
лишает возможности быстро обращаться к тому или иному символу по индексу
А настолько ли это существенная проблема?
При автоматической обработке текста важно скорее копирование строки или ее части, преобразование в верхний-нижний регистр, сравнение.
При ручной разве что подсчет количества символов или выделение "где-то отсюда досюда", но там скорость не так критична, все-таки работа ведется с человеком. Да и символы используются не моноширинные, так что просто по координатам не посчитать.
Просто действительно не изобретал развесистые текстовые редакторы. Максимум - аналог поля ввода на SDL, где удаление бэкспейсом 1 байта utf-8 приводило к интересным последствиям.
Цитата Сообщение от MasterOfAlteran Посмотреть сообщение
И именно UTF-32 всегда имеет только один code-unit.
Так все же что с диактрическими символами? Некоторый софт считает их отдельными, некоторый составными.
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 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
8489 / 6156 / 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
8489 / 6156 / 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
8489 / 6156 / 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
8489 / 6156 / 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
8489 / 6156 / 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
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
30.07.2020, 16:52
Это явна и глупая ошибка программиста, когда программист пихает ф-цию параметры которые совсем не то что в определении этой ф-ции.


Как с выводом на в окна информации я никогда не имел проблем.
Касательно с консоли там проблема не с выводом, а с вводом при чем скорее всего именно в реализации стандартной библиотеки ибо через WriteConsole()/ReadConsole() все вроде нормально работает.
0
 Аватар для COKPOWEHEU
4090 / 2688 / 432
Регистрация: 09.09.2017
Сообщений: 11,956
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
Ответ Создать тему
Опции темы

Новые блоги и статьи
[golang] Breadth-First Search
alhaos 19.05.2026
BFS (Breadth-First Search) — это базовый алгоритм обхода графа в ширину, который поуровнево исследует все связанные вершины. Он начинает с выбранной точки и проверяет всех соседей, прежде чем. . .
[golang] Алгоритм «Хак Госпера»
alhaos 17.05.2026
Алгоритм «Хак Госпера» Хак Госпера (Gosper's Hack) — алгоритм нахождения следующего по величине числа с тем же количеством установленных бит. Придуман Биллом Госпером в 1970-х, опубликован в. . .
Рисование бинарного древа до 6-го колена на js, svg.
russiannick 17.05.2026
<svg width="335" height="240" viewBox="0 0 335 240" fill="#e5e1bb"> <style> <!]> </ style> <g id="bush"> </ g> </ svg> function fn(){ let rost;/ / высота древа let xx=165,yy=210,w=256;
FSharp: interface of module
DevAlt 16.05.2026
Интерфейс модуля F# позволяет управлять доступностью членов, содержащихся в реализации модуля. По-умолчанию все члены модуля доступны: module Foo let x = 10 let boo () = printfn "boo" . . .
Хитросплетение родственных связей пантеона греческих богов.
russiannick 14.05.2026
Однооконник, позволяющий узреть и изучить отдельных героев древней Греции. <!DOCTYPE html> <html lang="ru"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible". . .
[golang] Угол между стрелками часов
alhaos 12.05.2026
По заданным значениям часа и минуты необходимо определить значение меньшего угла между стрелками аналогового циферблата часов. import "math" func angleClock(hour int, minutes int) float64 { . . .
Debian 13: Установка Lazarus QT5
ВитГо 09.05.2026
Эта инструкция моя компиляция инструкций volvo https:/ / www. cyberforum. ru/ blogs/ 203668/ 10753. html и его же старой инструкции по установке Lazarus с gtk2. . .
Нейросеть на алгоритме "эстафета хвоста" как перспектива.
Hrethgir 06.05.2026
На десерт, когда запущу сервер. Статья тут https:/ / habr. com/ ru/ articles/ 1030914/ . Автор я сам, нейросеть только помогает в вопросах которые мне не известны - не знаю людей которые знали-бы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru