如何使用libICU将代码点列表编码为UTF8块?

时间:2013-11-15 05:36:13

标签: encoding utf-8 icu

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

代码点取自next32PostInc function

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

1 个答案:

答案 0 :(得分:0)

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

来自Unicode FAQ

  

鉴于任何工业强度的文本和国际化   支持API必须能够处理字符序列   字符串是否由a内部表示,差别不大   UTF-16代码单元序列,或一系列代码点(= UTF-32代码单元)。 UTF-16和UTF-8都是为了工作而设计的   通过代码单元序列的事实,子串很容易   给定的代码点是唯一的。

所以只需使用UTF-32功能。