Если вас интересует, как хранятся символы, вы можете зайти на сайт 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.
Плюс по любым причинам я забыл.