2013-06-18 79 views
0

這是我得到的錯誤。 爲了解釋,我想打印→字符,根據http://www.endmemo.com/unicode/unicodeconverter.phpC++錯誤字符太大

該代碼是2192.但我可能會使用錯誤的代碼,如果是的話,什麼是正確的方式來打印→。

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    UINT oldcp = GetConsoleOutputCP(); 
    SetConsoleOutputCP(CP_UTF8); 

    cout<<"\x2192"<<endl; 

    SetConsoleOutputCP(oldcp); 

    return 0; 
} 
+0

UTF-8不是'2912'。 –

回答

0

從使用_tmainSetConsoleOutputCP我猜你大多是有關Windows。恐怕我對此不太瞭解;希望知道更多關於這個特定情況的人會加入,但是這個程序在我用UTF-8終端嘗試的一個快速測試中產生了你正在尋找的輸出。這裏的程序:

#include <iostream> 

int main(void) 
{ 
    std::cout << "\xE2\x86\x92" << std::endl; 
    return 0; 
} 

而且輸出示例:

$ make example && ./example 
c++  example.cpp -o example 
→ 

我只是直接輸出→字符的UTF-8編碼。

等價(至少對於鐺):

#include <iostream> 

int main(void) 
{ 
    std::cout << "→" << std::endl; 
    return 0; 
} 
+0

std :: cout <<「\ xE2 \ x86 \ x92」<< std :: endl;只是給出3個不同的符號 – Constantine

+0

是程序的錯嗎?或者你正在運行它的終端? –

+0

我真的不知道......我對這個東西是全新的 – Constantine

0

平臺上的一個char是8位。您的代碼部分"\x2192"會嘗試將16位放入其中。什麼不適合,所以你得到警告。

你可能指的是幾個字符,如"\x21\x92""\x92\x21"?這將創建一個有兩個字符(+ 0)的有效字符串。如果評論是正確的,你仍然可以調整它以獲得正確的值。

+0

\ x21 \ x92給出了兩個不同的符號,任何關於如何讓我的字符超過8位或其他東西的建議? – Constantine

+0

你的片段意味着你的目標是UTF-8。您應該瞭解如何使用UTF-8編碼您的代碼點。 –

+0

我已經閱讀了周圍,我得到死路一條或太複雜的方式。我會提出另一個問題,你認爲打印出該符號最簡單的方法是什麼? – Constantine