我正在研究在本机Node.js模块中使用ICU进行Unicode字符串处理,因为在我看来v8::String
(根据these docs)没有这个的C ++ API目的
据我所知,V8期望在ExternalStringResource
和其他API中使用UTF-16,所以我想使用ICU进行UTF-16处理。
我特别需要:
所以我查看了ICU文档并找到了UnicodeString
和CharacterIterator
类。但是,UnicodeString
没有fromUTF16
方法,只有fromUTF8
和fromUTF32
。
我不确定的另一件事是,UnicodeString
构造函数是否复制了我给出的数据?我非常喜欢使用零拷贝方法,我只使用不可变对象,因此它不应该执行任何复制操作,只需使用我指向的缓冲区。 / p>
我也不确定我是否可以使用UCharIterator
(假设我能以某种方式从我的UTF-16字符串转换UChar*
)。
所以我的问题是:如何将ICU用于上述目的?
提前感谢您的回答!
答案 0 :(得分:6)
UnicodeString
默认使用UTF-16进行存储。这就是为什么它只有fromUTF8
和fromUTF32
:来自UTF-16,没有转换。
它会复制数据。它是一个拥有的字符串,非常像std::string
。
如果您不想复制数据,可以使用UCharIterator
。 UChar
is a 16-bit value。您可以通过定义UCHAR_TYPE
宏来强制它为您喜欢的16位类型:
将UChar定义为UCHAR_TYPE,如果是#defined(例如,定义为char16_t),或者将wchar_t定义为16位宽;总是假设没有签名。
如果两者都不可用,则将UChar定义为uint16_t。
这使得UChar平台依赖的定义允许直接字符串类型与具有16位wchar_t类型的平台兼容。