4

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

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

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

所以我查看了 ICU 文档并找到了UnicodeStringCharacterIterator类。但是,UnicodeString没有fromUTF16方法,只有fromUTF8and fromUTF32

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

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

所以我的问题是:我如何将 ICU 用于上述目的?

提前感谢您的回答!

4

1 回答 1

6

UnicodeString默认使用 UTF-16 进行存储。这就是为什么它只有fromUTF8and fromUTF32:从 UTF-16 开始,不需要进行任何转换。

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

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

将 UChar 定义为 UCHAR_TYPE,如果是 始终假定为无符号。

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

这使得 UChar 的定义依赖于平台,但允许直接字符串类型与具有 16 位 wchar_t 类型的平台兼容。

于 2013-11-07T17:04:42.297 回答