Я прошу підрахувати всі можливі допустимі комбінації в Unicode з поясненнями.
1111 998 : 17 літаків × 65 536 символів на літак - 2048 сурогатів - 66 несимволів
Зверніть увагу, що UTF-8 та UTF-32 теоретично можуть кодувати набагато більше 17 площин, але дальність дії обмежена на основі обмежень кодування UTF-16 .
В Unicode 12.1 насправді призначено 137 929 кодових точок .
Я також не розумію, чому в байтах продовження є обмеження, хоча початковий байт цього символу очищає, як довго він повинен бути.
Метою цього обмеження в UTF-8 є зробити кодування самосинхронізуючимся .
Для контрприкладу розглянемо китайське кодування GB 18030 . Там буква ß
представлена у вигляді послідовності байтів 81 30 89 38
, яка містить кодування цифр 0
та 8
. Отже, якщо у вас є функція пошуку рядків, не розроблена для цієї специфічної кодування вигадки, тоді пошук цифри 8
виявить помилковий позитивний результат у межах листа ß
.
У UTF-8 цього не може статися, оскільки неперекриття між байтами ведучого та байтами сліду гарантує, що кодування коротшого символу ніколи не може відбутися в кодуванні довшого символу.