如何将 (ICU4C) Unicode 字符串逐个字符复制到另一个 Unicode 字符串
How to copy a (ICU4C) Unicode string to another Unicode string character by character?
我正在尝试使用 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￿
统一码表
111 - 拉丁小写字母 O
103 - 拉丁小写字母 G
您有两个问题:
- 仅当迭代器超出字符串末尾时,
StringCharacterIterator::hasNext
返回 false。 -
StringCharacterIterator::next32
推进迭代器的当前位置并返回新的代码点。 它类似于原始指针或标准库样式迭代器的*(++it)
。
综上所述,这意味着您将跳过字符串的第一个字符,并在末尾之后读取一个额外的字符。
您可以使用 next32PostInc
,它的行为类似于原始指针或标准库迭代器的*(it++)
,而不是 next32
:
while(chars.hasNext())
copy.append(chars.next32PostInc());
相关文章:
- 如何将unicode字符串从C++传递到delphi
- 将ANSI C字符串转换为UNICODE
- 将 unicode 字符串与 c ++ 符号进行比较?
- 如何在 c++ 中读取用 utf-8 编码的 java unicode 字节字符串
- C++:Unicode 字符串文字的可移植性
- 如何使用 CTypes 将 wchar_t** - 以空结尾的 UNICODE 字符串数组 - 返回到 Python 脚
- 在将 unicode 替换为C++字符串中的空格时出现分段错误
- C++ 原始字符串 Unicode 文字
- Xamarin Android:在 C++ 中将字符串从 C# 封送到 Unicode 字符串的正确方法是什么?
- 如何在 python 包装中使用 unicode 字符串用于带有 cython 的 c++ 类?
- 六角字符串到UTF-8(UNICODE)字符串
- 如何使用poco :: logger记录Unicode字符串
- 将 Unicode 字符/字符串写入文件
- 如何将 Unicode 字符串连接成字符串以传递到 mysql 调用中
- 从终端 C++ 中的字符串中打印出 unicode 字符
- Unicode字符串Visual C 构造函数
- 字符串到 Unicode,Unicode 到十进制码位 (C++)
- 如何让 SWIG 返回 Python 2 中字符串的 unicode 对象
- 如何将 (ICU4C) Unicode 字符串逐个字符复制到另一个 Unicode 字符串
- 如何从Windows中的进程中读取Unicode字符串