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

时间:2018-01-05 14:31:04

标签: c++ unicode icu

我已经开始使用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

2 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:1)

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

- Shane(来自ICU团队)