如何使用UTF-16的ICU?

我正在研究在本地Node.js模块中使用ICU进行Unicodestring处理,因为在我看来, v8::String (根据这些文档 )没有用于此目的的C ++ API。

据我所知,V8需要ExternalStringResource和其他API中的UTF-16,所以我想使用ICU进行UTF-16处理。
我特别需要:

  • 迭代UTF-16string的字符(而不仅仅是16位代码单元)
  • 告诉UTF-16string包含的字符数(不只是16位代码单元)

所以我看了一下ICU文档,发现了UnicodeStringCharacterIterator类。 但是, UnicodeString没有fromUTF16方法,只有fromUTF8fromUTF32

我不确定的另一件事是, UnicodeString构造函数是否复制我给与否的数据? 我非常希望使用零复制的方法,我只是与一个不可变的对象工作,所以它不应该执行任何复制操作,只需使用我指向它的缓冲区。

我也不确定是否可以使用UCharIterator (假设我可以以某种方式从我的UTF-16string转换UChar* )。

所以我的问题是: 我如何使用ICU来达到上述目的?

在此先感谢您的答案!

UnicodeString使用UTF-16进行存储。 这就是为什么它只有fromUTF8fromUTF32 :UTF-16没有转换。

它会复制数据。 它是一个拥有string,很像std::string

如果您不想复制数据,则可以使用UCharIteratorUChar是一个16位的值 。 您可以通过定义UCHAR_TYPEmacros来强制它成为您喜欢的任何16位types:

定义UChar为UCHAR_TYPE,如果是#defined(例如char16_t),或者wchar_t(如果是16位宽); 总是被假定为无符号的。

如果两者都不可用,则将UChar定义为uint16_t。

这使得UChar平台依赖的定义,但允许与16位wchar_ttypes的平台直接stringtypes兼容。