首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用ICU与UTF-16?

如何使用ICU与UTF-16?
EN

Stack Overflow用户
提问于 2013-11-07 16:59:57
回答 1查看 1.9K关注 0票数 4

我正在研究如何在本机Node.js模块中使用ICU处理Unicode字符串,因为在我看来,v8::String (根据这些医生)似乎没有用于此目的的C++ API。

据我所知,V8希望在ExternalStringResource和其他API中使用UTF-16,所以我想使用ICU进行UTF-16的处理。

我特别需要:

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

因此,我查看了ICU文档,并找到了UnicodeStringCharacterIterator类。但是,UnicodeString没有fromUTF16方法,只有fromUTF8fromUTF32

另一件我不确定的事情是,UnicodeString构造函数是否复制了我给它的数据?非常希望使用零拷贝方法,在这种方法中,我只使用不变的对象,这样它就不应该执行任何复制操作,只需使用我指向的缓冲区即可。

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

因此,我的问题是:如何使用ICU实现上述目的?

提前感谢您的回答!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-07 17:04:42

默认情况下,UnicodeString使用UTF-16作为存储。这就是为什么它只有fromUTF8fromUTF32:从UTF-16没有转换。

它确实复制了数据。它是一个拥有字符串,很像std::string

如果不想复制数据,可以使用UCharIterator是16位值。。通过定义UCHAR_TYPE宏,您可以强制它成为您喜欢使用的任何16位类型:

将UChar定义为UCHAR_TYPE,如果定义为#(例如,定义为char16_t),如果定义为16位,则定义为wchar_t;始终假定为无符号。 如果两者都不可用,则将UChar定义为uint16_t。 这使得UChar的定义依赖于平台,但允许直接字符串类型与具有16位wchar_t类型的平台兼容。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19842014

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档