由于程序要求(快速访问单个字符),我使用uint32_t[]
表示字符。只需存储代码点,而不是UTF-32 代码单元。因为我不认为UTF-32代码单元和Unicode代码点是一回事,所以我必须将它们分开。
我需要使用libICU
将这些代码点编码为UTF-8块,并且很难找到字符级累积编码器。我看到了使用UnicodeString::append()
的方法,但它需要双重转换。 ucnv_convert
函数似乎可以完成这项工作,但只能使用UTF-32 代码单元。如果我将它们与代码点一起使用,我真的不确定安全性。目前我正在寻找与next32PostInc
函数相反的东西。我怎样才能做到这一点?如果我对代码点和代码单元的想法,请纠正我。
答案 0 :(得分:0)
当前的Unicode规范定义UTF-32代码单元等于代码点。
来自Unicode FAQ:
鉴于任何工业强度的文本和国际化 支持API必须能够处理字符序列 字符串是否由a内部表示,差别不大 UTF-16代码单元序列,或一系列代码点(= UTF-32代码单元)。 UTF-16和UTF-8都是为了工作而设计的 通过代码单元序列的事实,子串很容易 给定的代码点是唯一的。
所以只需使用UTF-32功能。