0

由于程序要求(快速访问单个字符),我正在使用uint32_t[]字符。只存储代码点,而不是 UTF-32代码单元。因为我不认为 UTF-32 代码单元和 Unicode 代码点是一回事,所以我必须将它们分开。

代码点取自next32PostInc函数

而且我需要使用 将这些代码点编码为 UTF-8 块libICU,而且很难找到字符级累积编码器。我看到了一种使用方法UnicodeString::append(),但它需要双重转换。ucnv_convert函数似乎可以完成这项工作,但只能使用 UTF-32代码单元如果我将它们与代码点一起使用,我真的不确定安全性。目前我正在寻找与next32PostInc功能相反的东西。我怎样才能做到这一点?如果我对代码点和代码单元的想法,请纠正我。

4

1 回答 1

1

当前的 Unicode 规范定义 UTF-32 代码单元等于代码点。

Unicode 常见问题解答

鉴于任何工业级文本和国际化支持 API 都必须能够处理字符序列,因此字符串内部是由 UTF-16 代码单元序列还是由代码点序列( = UTF-32 代码单元)。UTF-16 和 UTF-8 都旨在简化子字符串的处理,因为给定代码点的代码单元序列是唯一的。

所以只需使用 UTF-32 函数。

于 2013-11-15T23:26:09.810 回答