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 ответов

17 просмотров

Почитай про стандарты кодирования 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

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта