如何打印unicode codepoint?

时间:2014-01-15 03:30:52

标签: c++ linux gcc unicode console

如何在Linux上的C ++(gcc / clang)中将unicode codepoint打印为unicode字符? 假设我有类似的东西:

typedef uint32_t codepoint;
codepoint cp = somefunction();

如何将cp打印为单个unicode字符?我有en_US.UTF-8语言环境。

我搜索了SO,我尝试过:wcout,wstring,wchar_t,setlocale,codecvt(gcc中不存在)。

1 个答案:

答案 0 :(得分:1)

GNU中的

std::wcoutlittle quirk:与C stdio同步时,C ++和C I / O子系统需要单独本地化:

所以要么是unsync

#include <iostream>
#include <cstdint>
#include <locale>
int main()
{
    std::uint32_t n = 0x98A8;

    std::wcout.sync_with_stdio(false);
    std::wcout.imbue(std::locale("en_US.utf8"));
    std::wcout << wchar_t(n) << '\n';
}

http://coliru.stacked-crooked.com/a/13b718ae11fa539e

或本地化

#include <iostream>
#include <cstdint>
#include <locale>
#include <clocale>
int main()
{
    std::uint32_t n = 0x98A8;

    std::setlocale(LC_ALL, "en_US.utf8");
    std::wcout.imbue(std::locale("en_US.utf8"));
    std::wcout << wchar_t(n) << '\n';
}

http://coliru.stacked-crooked.com/a/80b7d4547e1184ad