如何在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中不存在)。
答案 0 :(得分:1)
std::wcout
有little 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';
}