2013-06-18 91 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