什么是OSX中CFString的原生utf编码?

时间:2012-03-21 10:24:51

标签: macos cocoa core-text

这应该很容易找到,但我似乎无法在任何地方找到它 - 所以请原谅,如果它没有脑子。什么是CFString,UTF-16,UTF-8等中使用的本机UTF存储。

为什么我要问的是我是否正在连接某些lua代码并且lua可以处理UTF-8字符串但是如果我将它们转换为CFSTring,那么如果它在内部使用UTF-16会有性能损失吗? / p>

我查看了CFStringGetSystemEncoding并返回mac roman - 这似乎不正确。

locale返回

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

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

TIA

1 个答案:

答案 0 :(得分:1)

文档中有简短的章节“String storage”,说它可以在内部进行各种编码:

  

虽然概念上CFString对象将字符串存储为Unicode字符数组,但实际上它们通常会更有效地存储它们。 CFString对象表示字符串所需的内存通常小于简单的UniChar数组所需的内存。

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

  

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