为什么std :: wcout不能输出所有UCS-2字符?

时间:2013-02-07 23:10:16

标签: c++ unicode character-encoding locale iostream

#include <iostream>
#include <locale>

using namespace std;

int main()
{
    wcout.imbue(/* What to place here? */);

    for (wchar_t c = 0; c <= 0xFFFF; c++)
    {
        if (IsHumanReadable(c))
        {
            wcout << c; // c may be a Chinese or Arabic character.
        }
    }
}

我的机器是Windows 7,它是基于unicode的。

上面的代码不输出任何阿拉伯字符,而相同的字符可以在源文件中正确显示,这证明我的机器支持显示阿拉伯字符。

为什么阿拉伯字符不能显示在控制台窗口中?

1 个答案:

答案 0 :(得分:0)

第一行应该是

 _setmode(_fileno(stdout), _O_WTEXT); 

对于宽字符输出,它是相当于适当的imbue()的Windows(除了C ++ 11提出的要求之外,它们仍然不支持标准C ++中的Unicode)。

检查MSDN以获取#include

的标头 另请注意,安装在控制台窗口中的字体往往缺少很多其他Windows程序可以显示的内容。如有疑问,请将程序输出重定向到文件并使用Wordpad等打开该文件。