0

UTF 编码有非字符代码,我需要处理这些异常。我知道有很多图书馆可以做到这一点,但我认为我需要了解基本原则。

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

更新

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

  1. 正确提升代理对字符
  2. 或禁止它们进行可靠的字符处理。

但问题是我不确定代理对是 UTF-16 上唯一需要关心的东西。我认为应该有更多的东西需要关心,我想知道这一点。如果可能的话,也可以使用其他编码。当然,前提是它足够简单处理。如果它非常复杂,我将只使用libICU.

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

4

1 回答 1

1

NSString 上有一个方法

enumerateSubstringsInRange:options:usingBlock:

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

于 2013-03-13T16:18:17.367 回答