2014-02-27 72 views
0

我試圖獲得unicode字符macron(U + 00AF),即一個overscore,以在各種linux控制檯上一致地打印。到目前爲止,一些控制檯可以工作(例如,putty ssh),其他人不會(例如,ubuntu shell),我無法弄清楚我在一種情況下(可能是運氣)做了什麼,在另一種情況下是錯誤的。使用C++將UTF8字符打印到Linux控制檯

我確實知道Unicode和Utf8的基礎知識,但我一直無法弄清楚如何始終讓控制檯顯示相應的字符。

有什麼建議嗎?請注意,這顯然是針對unix控制檯的 - 我發現的所有類似問題都集中在特定於Windows的控制檯命令上。

這裏是我將有效地希望得到工作:

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

這可能有所幫助:http://stackoverflow.com/questions/1799063/how-can-i-display-unicode-characters-in-a-linux-terminal-using-c 特別是-export LC_ALL = en_US。 UTF-8 – Eejin

回答

0

不幸的是我沒有嘗試過或者能夠在建議的方式中找到始終顯示適當的字符,所以我最終使用ASCII連字符' - '作爲足夠接近的匹配。

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 

但是最終的結果依賴於許多用戶設置(控制檯,字體等),所以不能保證它會好。