使用C ++将UTF8字符打印到linux控制台

时间:2014-02-27 12:33:23

标签: c++ unicode utf-8 console

我试图获得unicode字符macron(U + 00AF),即一个超级核心,在各种Linux控制台上一致打印。到目前为止,一些控制台工作(例如,putty ssh),其他控制台没有(例如,ubuntu shell),而且我无法弄清楚我在一个案例中做了什么(可能是运气)而在另一个案例中是错误的。

我确实知道Unicode和Utf8的基础知识,但我无法弄清楚如何始终如一地获取控制台来显示相应的字符。

有什么建议吗?请注意,这显然适用于unix控制台 - 我发现的所有类似问题都集中在特定于Windows的控制台命令上。

以下是我有效的工作方式:

wchar_t post = L'¯'; //0xC2AF
std::wcout << post << std::endl;

2 个答案:

答案 0 :(得分:0)

解决方案是将其作为多字符串输入流:

std::string s = "\uC2AF";
std::cout << s << std::endl;

或使用

设置区域设置
char* setlocale( int category, const char* locale);

function

std::locale old_locale;  // current locale
setlocale(LC_ALL, "en_US.UTF-8");
wchar_t w = 0xC2AF;
std::wcout << w << std::endl;
setlocale(LC_ALL, old_locale.name().c_str());  // restore locale

但最终结果取决于许多用户设置(控制台,字体等),所以不能保证它没问题。

答案 1 :(得分:0)

不幸的是,我尝试或找不到任何建议的方式始终显示适当的字符,所以我最终使用了ASCII连字符&#39; - &#39;足够接近。