我正在尝试使用ICU的StringCharacterIterator
将字符串中的字符复制(并可能更改)到目标字符串。但是,我有意想不到的结果,我不确定为什么。
我希望此计划的最后一行输出为dog
,但我得og∩┐┐
#include <iostream>
#include <icu4c/unicode/schriter.h>
int main()
{
UnicodeString dog = UnicodeString::fromUTF8("dog");
StringCharacterIterator chars(dog);
UnicodeString copy;
while(chars.hasNext())
copy.append(chars.next32());
for(int i=0; i<copy.countChar32(); i++)
{
int32_t charNumber = copy.char32At(i);
std::cout << charNumber << "\n";
}
std::string stdString;
copy.toUTF8String(stdString);
std::cout << stdString;
}
节目输出
111
103
65535
og￿
Unicode表格
111 - 拉丁文小写字母o
103 - 拉丁语小写字母g
答案 0 :(得分:0)
你有两个问题:
StringCharacterIterator::hasNext
仅在迭代器超出字符串结尾时才返回false。StringCharacterIterator::next32
提升迭代器的当前位置并返回新的代码点。对于原始指针或标准库样式迭代器,它类似于*(++it)
。总而言之,这意味着你要跳过字符串的第一个字符,并在结尾处阅读额外的字符。
对于原始指针或标准库迭代器,您可以使用next32PostInc
,其行为类似于*(it++)
,而不是next32
:
while(chars.hasNext())
copy.append(chars.next32PostInc());