UTF编码有非字符代码,我需要处理这些异常。我知道有很多图书馆这样做,但我想我需要了解基本原则。
将Unicode代码点转换为UTF或UCS编码时,我应该注意什么?我认为每种编码都有不同的规则,但三个应该是一个简单的原则。我想知道。
更新
我发布了这个问题,因为我试图从NSString
中提取Unicode代码点(不是UTF-16字符)。 NSString
仅支持UTF-16方式API进行字符处理,因此我需要执行额外的处理以获取实际的代码点(这实际上是有意义的)。我的程序应该
但问题是我不确定代理对是在UTF-16上唯一需要关注的东西。我认为应该有更多的东西要关心,我想知道。如果可能的话,也可以用于其他编码。当然,只有它足够简单才能处理。如果它非常复杂,我将使用libICU
等库。
我知道libICU
会给我这些功能,但目前对我来说感觉有点过度工程。如果我知道基本规则(例如,“代理对是唯一需要关注的事情!”),至少禁止不受支持的字符应该非常简单和容易。
答案 0 :(得分:1)
NSString上有一个方法
enumerateSubstringsInRange:options:usingBlock:
您可以在其中指定NSStringEnumerationByComposedCharacterSequences作为选项:这将为您提供一系列NSRange值,用于指定组合的Unicode代码点。因此,对于适合单个unichar(即16位)的大多数代码点,NSRange将覆盖NSString中的单个索引,但是例如对于表情符号的Unicode代码点,NSRange将覆盖多个unichars。