在Unicode方面,NSString和unichar不匹配

时间:2012-06-10 18:05:13

标签: objective-c string unicode character-encoding

Apple的documentation表示

  

字符串对象实现为Unicode字符数组

但是,unichar数据类型(后面可能是unsigned short)的大小只有16位,这使得无法用unichar表示每个Unicode字符。我如何在脑海中调和这两个事实?

2 个答案:

答案 0 :(得分:1)

Apple的文档错误地引用了Unicode字符,这确实意味着UTF-16代码点,这是正确的。

在Unicode的早期阶段,希望它不会超过16位,但它有。 Apple和Microsoft(以及可能还有其他人)都使用16位整数来表示“Unicode字符”,即使某些字符必须由代理对表示。

NSString的各种方法处理这种情况(加上组合字符)并返回给定字符的范围。例如。 -rangeOfCharacterFromSet:...-rangeOfComposedCharacterSequences...

答案 1 :(得分:0)

  1. 不确定字符串是否由unichar数据类型表示。 “字符串对象实现为Unicode字符数组”并不意味着它在源代码中存储为unichar *。你不知道它是如何实现的,是吗?
  2. 如果unichar不是无符号短片怎么办?如果它是32位或64位数据类型怎么办?