带ICU的C++ UTF-8输出

Isa*_*aac 12 c++ stream utf-8 icu

我很难开始使用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;
}
Run Code Online (Sandbox Code Playgroud)

这是输出:

$ g++ -I/sw/include -licucore -Wall -Werror -o icu_test main.cpp 
$ ./icu_test 
пÑивеÑ
Run Code Online (Sandbox Code Playgroud)

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

我想也许我不知何故需要将输出流设置为UTF-8,因为ICU将字符串存储为UTF-16,但我真的不确定,我会认为ustream.h提供的运算符无论如何都会这样做.

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

Ste*_*mis 13

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

UnicodeString s("??????");
Run Code Online (Sandbox Code Playgroud)

您使用的宏仅适用于包含"不变字符"的字符串,即只有拉丁字母,数字和一些标点符号.

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

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

这可能是真的,但ICU并不知道这是真的.进程代码页可能不同(假设iso-8859-1),输出代码页可能不同(让我们说shift-jis).然后,该程序将无法正常工作.但是,使用API​​ UNICODE_STRING_SIMPLE的不变字符仍然有效.

希望这可以帮助.

srl,icu dev