Короткий ответ на вопрос "Q1: как он представляет кодовую точку Unicode над UFFFF?"Это: Вы должны быть UTF16
осведомлены и правильно обрабатывать Суррогатные кодовые точки .Информация и ссылки ниже должны дать вам указатели и пример кода, который позволяет вам сделать это.
Документация NSString
верна.Однако, в то время как вы сказали «NSString сказал, что использует внутреннее кодирование UTF-16», точнее будет сказать, что открытый / абстрактный интерфейс для NSString
основан на UTF16
.Разница в том, что это оставляет внутреннее представление строки частной реализацией, но открытые методы, такие как characterAtIndex:
и length
, всегда находятся в UTF16
.
Причина этого в том, что она имеет тенденциюдля достижения наилучшего баланса между старыми ASCII
-центрическими и Unicode-ориентированными строками, в значительной степени из-за того, что Unicode является строгим надмножеством ASCII
(ASCII
использует 7 битов для 128 символов, которые отображаются на первый128 кодовых точек Unicode).
Для представления Unicode кодовых точек , которые> U+FFFF
, что, очевидно, превышает то, что может быть представлено в одной UTF16
кодовой единице , UTF16
использует специальные суррогатные кодовые точки для формирования суррогатной пары , которые при объединении образуют кодовую точку Unicode> U+FFFF
.Вы можете найти подробности об этом по адресу: