ASCII — это таблица кодировки символов, в которой каждой букве, числу или знаку соответствует определенное число. В стандартной таблице ASCII 128 символов, пронумерованных от 0 до 127. В них входят латинские буквы, цифры, знаки препинания и управляющие символы.
Однако, 128 символов это 2^7, но почему тогда 8 бит это один байт? Нижнюю половину кодовой таблицы (0—127) занимают символы ASCII, а верхнюю (128—255) — кодовая страница, ASCII - дополнительные символы, включая набор национальных символов.
RTFM (Read The Fucking Manual) man ascii
Каждая страна добовляла кодовую страницу как хотела, что создавало много неудобств как для пользователей, так и для программистов. При попытке прочесть текстовый файл при помощи кодовой страницы, несовместимой с той в которой он был создан, возникают кракозябры. В последние годы получил широкое распространение Unicode как альтернатива традиционным кодовым страницам.
Юникод является самым распространенным стандартом в Сети, который позволяет хранить информацию всех языков человечества и вообще любого символа, который когда-либо использовался, включая эмотиконы, содержащий любой символ. Его понимают большинство компьютеров на планете и носители основных мировых языков. Юникод хранит результаты преобразования информации, выполненного через систему кодирования UTF-8, UTF-16 или UTF-32. Типы String и Character в Swift полностью совместимы с Юникодом
RTFM (Read The Fucking Manual) man unicode
Unicode можно рассматривать как «продолжение», расширение ASCII. Первые 128 символов в «Юникоде» кодируются так же, как в ASCII, и это те же самые символы. Что обеспечивает наибольшую компактность и обратную совместимость с 7-битной системой ASCII.
UTF(Unicode transformation format)-8/16 — две самые широко используемые кодировки в стандарте Unicode. Они обе обладают переменной длинной кодирования.
- UTF-8 (минимальное кол-во бит - 8 ) - данные требуют двух байтов, то и в UTF-8 они будут весить два байта. UTF-8 кодирует символ в двоичную строку от одного до четырех байтов. Так, для шифрования латинских символов достаточно одного байта, а для кириллических — двух. Swift 5 и более поздние версии используют только кодировку хранения UTF-8.
Чтобы компьютера понимал сколько байт нужно считывать, в старшие разряды помещаются специальные метки (0, 10, 110, 1110, 11110):
- UTF-16 (минимальное кол-во бит - 16) оперирует данными из двух и четырех байт. Кодировка подходит для восточных языков. До версии Swift 4.2 Swift использовал UTF-16 в качестве предпочтительной кодировки. Но поскольку UTF-16 не совместима с ASCII, у String было две кодировки хранения: одна для ASCII, другая для UTF-16.
В UTF-16 не используются маски внутри байтов, вместо этого перед байтом добавляется двухбайтовое число - BOM (Unicode byte order mark):
3.1.1.1 Memory Theme | Back To iOSWiki Contents | 3.1.2 RandomAccessMemory (RAM) Theme Folder