std :: wcout到XCode中的控制台窗口

时间:2008-11-09 15:25:40

标签: c++ xcode macos unicode iostream

在XCode项目中,如果我使用std::cout写入控制台,则输出正常。

但是,如果我使用std::wcout,我就没有输出。

我知道这是C ++中一个棘手的问题,我一直在谷歌上搜索XCode案例中的特定解决方案。我发现建议应该工作的一些事情是:


    std::cout.imbue( std::locale("") );


    std::setlocale(LC_ALL, "");

这些都没有任何区别。在我辞职之前,我花了几个星期的时间来研究facet API以便能够写入控制台,我想我会在这里检查一下受人尊敬的听证会。

[更新]

我认为我遇到问题的原因实际上与我正在尝试打印的某些字符串的特定编码有关。

如果我只发送一个字符串文字,使用L"my string" syntax就可以了!看来这是使用UTF32 - 小端编码。

但是,我一直在使用NSUTF32BigEndianStringEncoding编码将它与使用Objective C ++代码传递的字符串混合在一起。正是这种编码混合导致了问题。

我认为我们可以认为此事已经结束。谢谢你的阅读。

1 个答案:

答案 0 :(得分:3)

std :: wcout应该像std :: cout一样工作。

以下在我的MAC上正常工作:

#include <iostream>

int main()
{
    std::cout << "HI" << std::endl;
    std::wcout << L"PLOP" << std::endl;
}

也许(虽然有些代码会很好)因为你没有刷新缓冲区。请记住,std :: cout和std :: wcout是缓冲的。这意味着在填充缓冲区或显式刷新缓冲区之前,输出不会被推送到控制台。

您可以使用以下方法刷新缓冲区:

std::wcout << flush();
// or
std::wcout << endl;  // Those also puts a '\n' on the stream.