2013-08-02 45 views
4

對於控制檯應用程序,我需要顯示的符號:√
當我嘗試簡單地輸出它使用:
std::cout << '√' << std::endl;
std::wcout << '√' << std::endl;
它輸出數14846106代替。視窗控制檯不顯示平方根符號

我試圖尋找答案,發現的若干建議如下:
std::cout << "\xFB" << std::endl;
std::cout << (unsigned char)251 << std::endl;
這既顯示上標1

這可通過使用Lucida的字體Windows控制檯。我嘗試過使用各種字符頁面,並始終使用相同的上標1.當我嘗試通過getchar()cin查找其值時,該符號將轉換爲大寫字母V。不過,我確定它可以簡單地粘貼它來顯示這個字符。有沒有簡單的顯示Unicode字符的方法?

+1

14846106 == 0xe2 0x88 0x9a == U + 221a的utf-8編碼=='√'。讓您的文本編輯器和您的C++編譯器就源代碼文件編碼達成一致對於取得成功非常重要。 –

回答

1

實際上"\xFB"(unsigned char)251是相同的,並且對應於根符號√......但不在Lucida字體和其他字體ASCII表中,它是一個¹(上標1)。

開關與STL到Unicode是一種可能性,但我懷疑它會在Windows上運行......

#include <iostream> 
#include <locale.h> 

int main() { 
    std::locale::global(std::locale("en_US.UTF8")); 
    std::wcout.imbue(std::locale()); 

    wchar_t root = L'√'; 

    std::wcout << root << std::endl; 

    return 0; 
} 

由於這不能滿足你,這裏便攜式的Unicode庫:http://site.icu-project.org/

+0

您提供的代碼只能按預期產生運行時錯誤。儘管如此,感謝您的鏈接。這應該解決我的問題。 – nwn

+1

該OP使用諸如[CP 850](http://en.wikipedia.org/wiki/Code_page_850)的代碼頁,其中''\ xFB'被映射到'U + 00B9'(上標1),作爲反對[CP 437](http://en.wikipedia.org/wiki/Code_page_437)映射到'U + 221A'(平方根)。您當然可以將這個字符打印到Windows控制檯,因爲它在Unicode BMP中。大多數TT字體都有字形,比如Consolas。 – eryksun

+1

UTF-8在Windows中不是有效的區域設置編碼。有關將VC++ stdio配置爲使用UTF-16的方式,請參閱[本答案](http://stackoverflow.com/a/9051543)。如果源文件是UTF-8編碼,請記住用UTF-8 BOM('「\ xef \ xbb \ xbf」')保存文件以讓編譯器知道。 – eryksun