如何使用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文档,发现了UnicodeString
和CharacterIterator
类。 但是, UnicodeString
没有fromUTF16
方法,只有fromUTF8
和fromUTF32
。
我不确定的另一件事是, UnicodeString
构造函数是否复制我给与否的数据? 我非常希望使用零复制的方法,我只是与一个不可变的对象工作,所以它不应该执行任何复制操作,只需使用我指向它的缓冲区。
我也不确定是否可以使用UCharIterator
(假设我可以以某种方式从我的UTF-16string转换UChar*
)。
所以我的问题是: 我如何使用ICU来达到上述目的?
在此先感谢您的答案!
UnicodeString
使用UTF-16进行存储。 这就是为什么它只有fromUTF8
和fromUTF32
:UTF-16没有转换。
它会复制数据。 它是一个拥有string,很像std::string
。
如果您不想复制数据,则可以使用UCharIterator
。 UChar
是一个16位的值 。 您可以通过定义UCHAR_TYPE
macros来强制它成为您喜欢的任何16位types:
定义UChar为UCHAR_TYPE,如果是#defined(例如char16_t),或者wchar_t(如果是16位宽); 总是被假定为无符号的。
如果两者都不可用,则将UChar定义为uint16_t。
这使得UChar平台依赖的定义,但允许与16位wchar_ttypes的平台直接stringtypes兼容。