gpt4 book ai didi

带有 ICU 的 C++ UTF-8 输出

转载 作者:IT老高 更新时间:2023-10-28 23:15:24 28 4
gpt4 key购买 nike

我正在努力开始使用 C++ ICU 库。我试图让最简单的例子工作,但即使这样也失败了。我只想输出一个 UTF-8 字符串,然后从那里开始。

这是我所拥有的:

#include <unicode/unistr.h>
#include <unicode/ustream.h>

#include <iostream>

int main()
{
UnicodeString s = UNICODE_STRING_SIMPLE("привет");

std::cout << s << std::endl;

return 0;
}

这是输出:

$ g++ -I/sw/include -licucore -Wall -Werror -o icu_test main.cpp 
$ ./icu_test
пÑивеÑ

我的终端和字体支持 UTF-8,我经常使用带有 UTF-8 的终端。我的源代码是 UTF-8。

我认为也许我需要以某种方式将输出流设置为 UTF-8,因为 ICU 将字符串存储为 UTF-16,但我真的不确定,我会认为 ustream.h 提供的运算符会做无论如何。

任何帮助将不胜感激,谢谢。

最佳答案

如果您将初始化程序更改为:

UnicodeString s("привет");

您使用的宏是 only for strings that contain "invariant characters", i.e., only latin letters, digits, and some punctuation .

如前所述,输入/输出代码页很棘手。你说:

My terminal and font support UTF-8 and I regularly use the terminal with UTF-8. My source code is in UTF-8.

这可能是真的,但 ICU 不知道那是真的。进程代码页可能不同(例如 iso-8859-1),输出代码页可能不同(例如 shift-jis)。然后,该程序将无法运行。但是,使用 API UNICODE_STRING_SIMPLE 的不变字符仍然可以工作。

希望这会有所帮助。

srl, icu 开发者

关于带有 ICU 的 C++ UTF-8 输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2739572/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com