Unicode - ICU 库 - 获取 UnicodeString 中的代码点计数



>我从C++的ICU图书馆开始。

UnicodeString ucs = UnicodeString::fromUTF8(StringPiece(u8"U0001F674"));
ucs = ucs.unescape();
size_t len = ucs.length();

但是,len = 2.为什么?我只添加了一个 4 字节字符 (https://unicode-table.com/en/1F674/(。有没有办法,如何返回正确的长度?

我希望长度为 1,因为只有 1 个代码点。如果我使用

UnicodeString::fromUTF8(StringPiece(u8"u06b5"));
ucs = ucs.unescape();
size_t len = ucs.length();

我得到正确的len = 1

UnicodeString使用 UTF-16,而不是 UTF-8。

在 UTF-16 中,代码点 U+1F674 需要两个 2 字节代码单元:0xD83D 0xDE74 . 而代码点U+06B5只需要一个 2 字节代码单元:0x06B5

要回答原始问题,为了获取 UnicodeString 中的码位数,请使用 UnicodeString::countChar32。

- Shane(来自ICU团队(

最新更新