В настоящее время я изучаю Swift, используя язык быстрого программирования книги 3.1.
В книге указано, что типы Swift String
и Character
полностью совместимы с юникодом, причем каждый символ представлен 21-битным скалярным значением юникода. Каждый символ можно просмотреть через utf8, 16, 32.
Я понимаю, как utf8 и utf32 работают на уровне байтов и битов, но мне трудно понять, как utf16 работает на уровне битов.
Я знаю, что для символов, кодовая точка которых может умещаться в 16 бит, utf16 просто представляет символ как 16-битное число. Но для символов, для представления которых требуется более 16 бит, используются два 16-битных блока (я полагаю, они называются суррогатной парой).
Но как два 16-битных блока представлены на битовом уровне?