какая родная кодировка utf для CFString в OSX?

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

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

Я просмотрел CFStringGetSystemEncoding, и он возвращает mac roman, что кажется неправильным.

локаль возвращает

ЯЗЫК="en_AU.UTF-8"...

что указывает на то, что это utf-8, но затем документы указывает на то, что это 16 бит?

Тиа


person daven11    schedule 21.03.2012    source источник
comment
Также ознакомьтесь с исходным кодом, предоставленным Apple: opensource. apple.com/source/CF/CF-1153.18/CFString.h.auto.html Хотя там написано то же самое.   -  person eonil    schedule 07.02.2020


Ответы (1)


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

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

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

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

person hamstergene    schedule 21.03.2012
comment
большое спасибо, я, должно быть, просмотрел документы 100 раз и не увидел эту главу - person daven11; 21.03.2012