170 похожих чатов

Разобрался, спасибо за ссылку. Получается что эти типы данных 8,

16 и 32 используются для хранения кода.
Русская Б в Unicode кодируется 2 байтами, поэтому нужно использовать char16_t, char8_t для нее не подойдет.
Или wchar_t (32 бита), который заполнит остальное 0-ми.
std::locale::global(std::locale("ru_RU.UTF-8"));

char16_t wCh = 0b010000010001;

char16_t wCh3 = 0x411;

char16_t wCh4 = u'Б';
Для вывода кастим к wchar_t , потому что для него есть перегрузка по выводу.
std::wcout << (wchar_t)wCh << " " << (wchar_t)wCh3 << " " << (wchar_t)wCh4 << '\n';
Я верно все понял ?

10 ответов

2 просмотра

Почитай про стандарты кодирования unicode, и такие вопросы пропадут. utf-8: для кодирования использует 8-битные числа codepoint кодируется от 1 до 4 таких чисел, а раньше количество до 6 или 7 доходило, потом стандарт unicode запретил это для совместимости с utf-16. utf-16: для кодирования использует 16-битные числа codepoint кодируется от 1 до 2 (суррогатная пара) таких чисел. utf-32: использует 32 битные числа, тут никаких тонкостей, даже endianness нет.

Дмитрий 🎮
Почитай про стандарты кодирования unicode, и такие...

кстати, а что в итоге делают с самыми длинными(которым нужны все 32 бита) кодпойнтами в случае utf-8 или 16? Сейчас таких просто не бывает? Просто не понимаю, зачем в стандарте намеренно ограничили длину кодирования

Любой символ это просто уникальный номер в таблице unicode. (Тут я сильно упрощаю для понимания, в unicode много сложностей) Просто этот номер символа, который влезает только в 32 бита будет кодироваться согласно стандарту кодирования utf-8 или utf-16. В кодировке utf-8 это будет 4 байта, а в utf-16 два 16-битных числа.

Дмитрий 🎮
Любой символ это просто уникальный номер в таблице...

а как закодировать 32 битный код с помощью 4х 8битных, при условии что 1-2 бита от каждого байта(не помню, как именно там это устроено) кодируют только наличие продолжения, то есть используются в технических целях?

Anton Semenov
а как закодировать 32 битный код с помощью 4х 8бит...

https://ru.wikipedia.org/wiki/UTF-8 Смотри "Алгоритм кодирования".

Дмитрий 🎮
https://ru.wikipedia.org/wiki/UTF-8 Смотри "Алгор...

в подробности до сих пор(посыпаю пеплом голову, даже сейчас) не вдавался. Я к тому, что кодпойнты по нынешним стандартам кодирования не могут быть 32х битными. Я вполне понимаю, что сейчас никому не нужно набора из всех 2^32 символов, но после историй с unix time и «640 кб хватит всем» это выглядит малость недальновидно 🙂

Anton Semenov
в подробности до сих пор(посыпаю пеплом голову, да...

Мне кажется, это сделано с заделом на будущее. Раньше считали и 16 бит хватит на все символы, но в итоге потом появились суррогатные пары... В unicode чего только не добавляют. Сейчас в unicode 1114112 символов, для кодирования этого числа нужно log 2 (1114112) + 1 = 21 бит.

Дмитрий 🎮
Мне кажется, это сделано с заделом на будущее. Ра...

вообще это я, конечно, малость оффтоплю, потому что по сути вообще мало чего знаю о юникоде (ну разве что кроме базовых штук как его использовать)

Anton Semenov
вообще это я, конечно, малость оффтоплю, потому чт...

В таком случае лучше использовать готовые библиотеки типа ICU. Иначе надолго засядешь с этим unicode, там стооолько тонкостей). Например, один и тот же видимый символ может кодироваться разной последовательностью codepoint`ов. И как ты сделаешь сравнение строк или перевод символа в нужный регистр?

Дмитрий 🎮
В таком случае лучше использовать готовые библиоте...

ну это понятно. Хорошо, что нужно это в основном для работы с текстом. Рендеринг обычно берет на себя ОС или библиотека, а хранить все вполне удобно в UTF-8

Похожие вопросы

Обсуждают сегодня

Если у меня есть такой класс: Object = {} function Object:new(a_name, a_transform, a_color, a_mesh, a_material, a_shader, a_textures) local private = {} private.n...
Cuarno Vile
4
зачем же переименовывать ? чтобы кол-во участников возросло или вдруг IBM от этого снова на свифте начнет кодить ? Я не понимаю что страшного в том что свифт гавно, если это т...
Oleh Nerzh
10
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
Гайз, кто-нибудь пробовал запустить probe-rs под камень, которого нет в probe-rs? Мб есть какой-нибудь пример у кого... Через target-gen попробовал сгенерировать chip-descript...
Максим Смирнов
2
здравствуйте. совершаю вот такую вещь: strcpy(line, (char)current_number); где current number — неподписанный шорт, line — массив чаров. ругань следующая: main.c:29:30: error...
Roberto's Ширгозиев
13
@MrMiscipitlick А можешь макрос написать, который будет вычислять смещение относительно переданных меток? Просто .label1-.label2, и вернуть значение.
КТ315
35
А еще в перле можно уже @arr1 + @arr2?
Sergei Zhmylove
53
Добрый день! Подскажите, пожалуйста: какими компетенциями нужно обладать, чтобы претендовать на работу эрланг (отдельная благодарность, если про элексир тоже подскажете) разр...
via ☸️ led
20
Всем привет. Ребят подскажите пожалуйста. Вопрос по дизасемблировани. Начну с начала. У меня есть скомпилированная программа на ГО (я разработчик) - в ней есть защита лицензии...
Zloy
11
Можно попросить небольшое ревью кода? Тут немнога, я ничего интереснее не придумал, чем написать аналог tree в качестве практики с cmake. https://github.com/hrimov/tree-unix/...
Andrew Hrimov
11
Карта сайта