我正在考虑将ICU用于本机node.js模块中的unicode字符串处理,因为在我看来 v8::String (根据 这些文档)为此目的没有C ++ API。

据我所知,V8期望UTF-16在 ExternalStringResource 和其他API,因此我想将ICU用于UTF-16处理。
我特别需要:

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

所以我查看了ICU文档,发现了 UnicodeStringCharacterIterator 课程。然而, UnicodeString 没有一个 fromUTF16 方法,仅 fromUTF8fromUTF32.

我不确定的另一件事是, UnicodeString 构造函数复制我提供的数据? ID 非常喜欢 要使用零拷贝方法,我只使用不变的对象,以便它不应执行任何复制操作,只需使用我指向的缓冲区即可。

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

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

预先感谢您的回答!

有帮助吗?

解决方案

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

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

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

如果是#defined(例如,为char16_t),则将UCHAR定义为UCHAR_TYPE,如果是16位,则将UCHAR定义为uchar_type。始终认为是未签名的。

如果两者都不可用,则将UCHAR定义为UINT16_T。

这使得UCHAR平台依赖性的定义允许与具有16位WCHAR_T类型的平台的直接字符串类型兼容性。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top