我正在研究如何在本机Node.js模块中使用ICU处理Unicode字符串,因为在我看来,v8::String (根据这些医生)似乎没有用于此目的的C++ API。
据我所知,V8希望在ExternalStringResource和其他API中使用UTF-16,所以我想使用ICU进行UTF-16的处理。
我特别需要:
因此,我查看了ICU文档,并找到了UnicodeString和CharacterIterator类。但是,UnicodeString没有fromUTF16方法,只有fromUTF8和fromUTF32。
另一件我不确定的事情是,UnicodeString构造函数是否复制了我给它的数据?非常希望使用零拷贝方法,在这种方法中,我只使用不变的对象,这样它就不应该执行任何复制操作,只需使用我指向的缓冲区即可。
我也不确定是否可以只使用UCharIterator (假设我可以从UTF-16字符串中以某种方式转换UChar* )。
因此,我的问题是:如何使用ICU实现上述目的?
提前感谢您的回答!
发布于 2013-11-07 17:04:42
默认情况下,UnicodeString使用UTF-16作为存储。这就是为什么它只有fromUTF8和fromUTF32:从UTF-16没有转换。
它确实复制了数据。它是一个拥有字符串,很像std::string。
如果不想复制数据,可以使用UCharIterator。是16位值。。通过定义UCHAR_TYPE宏,您可以强制它成为您喜欢使用的任何16位类型:
将UChar定义为UCHAR_TYPE,如果定义为#(例如,定义为char16_t),如果定义为16位,则定义为wchar_t;始终假定为无符号。 如果两者都不可用,则将UChar定义为uint16_t。 这使得UChar的定义依赖于平台,但允许直接字符串类型与具有16位wchar_t类型的平台兼容。
https://stackoverflow.com/questions/19842014
复制相似问题