这应该很容易发现,但是我似乎在任何地方都找不到它-因此,请稍等一下。什么是CFString,UTF-16,UTF-8等中使用的本机UTF存储?

为什么我要问我是否正在连接一些lua代码,并且lua可以处理UTF-8字符串,但是如果我将它们转换为CFSTring,那么如果它在内部使用UTF-16会导致性能下降?

我看了看CFStringGetSystemEncoding,它返回了mac roman-似乎不正确。

语言环境返回

LANG =“ en_AU.UTF-8” ...

这表明它是utf-8,但是docs似乎表明它是16位?

tia

最佳答案

文档中有一小段“ String storage”,它说内部可以有各种编码:


  尽管从概念上讲CFString对象将字符串存储为Unicode字符数组,但实际上它们通常更有效地存储它们。 CFString对象表示一个字符串所需的内存通常可能小于简单的UniChar数组所需的内存。


最后一段为那些关心额外转换的人提供了一种解决方案:


  您可以使用CFStringCreateMutableWithExternalCharactersNoCopy函数进一步控制字符串的后备存储。该函数创建对可变CFString对象的引用,但允许您保留持有该对象字符的Unicode缓冲区的完全所有权;对象本身指向缓冲区作为其后备存储。

关于macos - OSX中CFString的 native utf编码是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9802634/

10-09 14:28