Если вас интересует, как хранятся символы, вы можете зайти на сайт www.unicode.org и осмотреться. Вверху их главной страницы находится ссылка «Кодовые таблицы», в которой показаны все коды символов, доступные в Юникоде.
Всего в Unicode доступно чуть более миллиона кодов (не все они используются). Один байт может содержать 256 различных значений, поэтому вам понадобится три байта, если вы хотите хранить каждый возможный код Unicode.
Вместо этого Unicode обычно хранится в кодировке «UTF-8», которая использует меньше байтов для одних символов и больше для других. Первые 128 кодовых значений хранятся в одном байте, до первых 2048 кодовых значений хранятся в двух байтах, до 65536 хранятся в трех байтах, а остальные занимают четыре байта. Это было организовано так, что значения кода, которые используются чаще, занимают меньше места. AZ, az, 0-9 и! @ $% ^ & * () - [} {}; ': "|,. / <>? И некоторые, которые я забыл, берут один байт; почти весь английский, 98% Немецкий и французский (только догадка) могут храниться в одном байте на символ, и эти символы используются чаще всего: кириллица, греческий, иврит, арабский и некоторые другие используют два байта на символ. Индийские языки, большинство китайских, японские Корейский, тайский, тонны математических символов, может быть записано в трех байтах на символ. Редкие вещи (если вы когда-нибудь захотите написать текст в Linear A или Linear B, Emojis) занимают четыре байта.
Другая кодировка - UTF-16. Все, что занимает 1, 2 или 3 байта в UTF-8, занимает два байта в UTF-16. Это преимущество, если у вас есть китайский или японский текст с очень небольшим количеством латинских символов между ними.
О причинах дизайна UTF-8: у него есть несколько преимуществ перед другими конструкциями. Они есть:
Совместимость с символами US-ASCII
Разумная компактность
Самосинхронизация: это означает, что если вам дана часть последовательности байтов, которые являются символами в кодировке UTF-8, вы можете узнать, где начинается символ. В некоторых кодировках xy и yx могут быть допустимыми кодировками символов, поэтому, если вам дана часть последовательности ... xyxyxyxyxyxy ... вы не можете знать, какие символы у вас есть.
Правильность сортировки: если вы сортируете строки, содержащие символы в кодировке UTF-8, по их байтовым значениям, то они автоматически сортируются правильно в соответствии со значениями Unicode.
Совместим с однобайтовым кодом: большая часть кода, в котором используются однобайтовые значения, автоматически работает правильно с символами в кодировке UTF-8.
Плюс по любым причинам я забыл.