Skip to content

Latest commit

 

History

History
51 lines (26 loc) · 5.69 KB

3.1.1.2 ASCIIvsUNICODE.md

File metadata and controls

51 lines (26 loc) · 5.69 KB

Стандарты кодировки данных

  1. Как работают кодировки?

ASCII (American standard code for information interchange)

ASCII — это таблица кодировки символов, в которой каждой букве, числу или знаку соответствует определенное число. В стандартной таблице ASCII 128 символов, пронумерованных от 0 до 127. В них входят латинские буквы, цифры, знаки препинания и управляющие символы.

Однако, 128 символов это 2^7, но почему тогда 8 бит это один байт? Нижнюю половину кодовой таблицы (0—127) занимают символы ASCII, а верхнюю (128—255) — кодовая страница, ASCII - дополнительные символы, включая набор национальных символов.

ascii

RTFM (Read The Fucking Manual) man ascii

ASCII

Каждая страна добовляла кодовую страницу как хотела, что создавало много неудобств как для пользователей, так и для программистов. При попытке прочесть текстовый файл при помощи кодовой страницы, несовместимой с той в которой он был создан, возникают кракозябры. В последние годы получил широкое распространение Unicode как альтернатива традиционным кодовым страницам.

Юникод

Юникод является самым распространенным стандартом в Сети, который позволяет хранить информацию всех языков человечества и вообще любого символа, который когда-либо использовался, включая эмотиконы, содержащий любой символ. Его понимают большинство компьютеров на планете и носители основных мировых языков. Юникод хранит результаты преобразования информации, выполненного через систему кодирования UTF-8, UTF-16 или UTF-32. Типы String и Character в Swift полностью совместимы с Юникодом

RTFM (Read The Fucking Manual) man unicode

Unicode можно рассматривать как «продолжение», расширение ASCII. Первые 128 символов в «Юникоде» кодируются так же, как в ASCII, и это те же самые символы. Что обеспечивает наибольшую компактность и обратную совместимость с 7-битной системой ASCII.

Стандарты хранения Юникода

  1. UTF-8 vs UTF-16

UTF(Unicode transformation format)-8/16 — две самые широко используемые кодировки в стандарте Unicode. Они обе обладают переменной длинной кодирования.

  • UTF-8 (минимальное кол-во бит - 8 ) - данные требуют двух байтов, то и в UTF-8 они будут весить два байта. UTF-8 кодирует символ в двоичную строку от одного до четырех байтов. Так, для шифрования латинских символов достаточно одного байта, а для кириллических — двух. Swift 5 и более поздние версии используют только кодировку хранения UTF-8.

Чтобы компьютера понимал сколько байт нужно считывать, в старшие разряды помещаются специальные метки (0, 10, 110, 1110, 11110):

UTF-8

  • UTF-16 (минимальное кол-во бит - 16) оперирует данными из двух и четырех байт. Кодировка подходит для восточных языков. До версии Swift 4.2 Swift использовал UTF-16 в качестве предпочтительной кодировки. Но поскольку UTF-16 не совместима с ASCII, у String было две кодировки хранения: одна для ASCII, другая для UTF-16.

В UTF-16 не используются маски внутри байтов, вместо этого перед байтом добавляется двухбайтовое число - BOM (Unicode byte order mark):

BOM bytes


3.1.1.1 Memory Theme | Back To iOSWiki Contents | 3.1.2 RandomAccessMemory (RAM) Theme Folder