我应该考虑在Unicode代码点和UTF8 / 16/32之间进行转换或其他什么?

时间:2013-03-13 05:40:09

标签: unicode encoding

UTF编码有非字符代码,我需要处理这些异常。我知道有很多图书馆这样做,但我想我需要了解基本原则。

将Unicode代码点转换为UTF或UCS编码时,我应该注意什么?我认为每种编码都有不同的规则,但三个应该是一个简单的原则。我想知道。

更新

我发布了这个问题,因为我试图从NSString中提取Unicode代码点(不是UTF-16字符)。 NSString仅支持UTF-16方式API进行字符处理,因此我需要执行额外的处理以获取实际的代码点(这实际上是有意义的)。我的程序应该

  1. 正确宣传代理对字符
  2. 或禁止他们进行可靠的字符处理。
  3. 但问题是我不确定代理对是在UTF-16上唯一需要关注的东西。我认为应该有更多的东西要关心,我想知道。如果可能的话,也可以用于其他编码。当然,只有它足够简单才能处理。如果它非常复杂,我将使用libICU等库。

    我知道libICU会给我这些功能,但目前对我来说感觉有点过度工程。如果我知道基本规则(例如,“代理对是唯一需要关注的事情!”),至少禁止不受支持的字符应该非常简单和容易。

1 个答案:

答案 0 :(得分:1)

NSString上有一个方法

enumerateSubstringsInRange:options:usingBlock:

您可以在其中指定NSStringEnumerationByComposedCharacterSequences作为选项:这将为您提供一系列NSRange值,用于指定组合的Unicode代码点。因此,对于适合单个unichar(即16位)的大多数代码点,NSRange将覆盖NSString中的单个索引,但是例如对于表情符号的Unicode代码点,NSRange将覆盖多个unichars。