что такое нативная UTF-кодировка для CFString в OSX? - PullRequest
0 голосов
/ 21 марта 2012

Это должно быть легко узнать, но я не могу найти его нигде - поэтому, пожалуйста, извините, если это не просто. Какое собственное хранилище UTF используется в CFString, UTF-16, UTF-8 и т. Д.

Почему я спрашиваю, связан ли я с некоторым кодом lua, и lua может обрабатывать строки UTF-8, но если я преобразую их в CFSTring, тогда будет снижение производительности, если оно использует UTF-16 для внутреннего использования?

Я посмотрел на CFStringGetSystemEncoding и он возвращает mac roman - что, похоже, неверно.

языковой стандарт возвращает

LANG = "en_AU.UTF-8" ...

, который указывает, что это utf-8, но тогда документы , кажется, указывают, что это 16 бит?

ТИА

1 Ответ

1 голос
/ 21 марта 2012

В документах есть небольшая глава « Хранение строк », в которой говорится, что она может иметь различные внутренние кодировки:

Хотя концептуально объекты CFString хранят строки как массивы символов Юникода, на практике они часто хранят их более эффективно. Объем памяти, который требуется объекту CFString для представления строки, часто может быть меньше, чем требуется для простого массива UniChar.

Последний абзац предлагает решение для тех, кто обеспокоен дополнительными конверсиями:

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

...