Visual Studio的CRT中的_setmode如何与std :: wcout交互?

4
根据"传统智慧是错误的",如果在stdout上设置适当的标志,则CRT会做出相当多的工作,以平滑处理Win32控制台中Unicode的不一致性。但是,在这里我没有使用cstdio风格的函数——我正在使用iostream库。 _setmode如何与标准流std::wcoutstd::wclogstd::wcerr交互(如果有的话)?如果不能与流一起使用,那么是否可能/如何获得等效的行为?







答案适用于VS2008或VS2010,比此版本早的版本不在考虑范围内。

1
呃,setlocale() 函数对 iostream 很重要。 - Hans Passant
相关的常见问题解答,表明答案将高度依赖于特定的环境:http://www.parashift.com/c++-faq-lite/input-output.html#faq-15.13 - Ben Voigt
同时相关但相对无定论的是:http://groups.google.com/group/microsoft.public.dotnet.languages.vc/browse_thread/thread/1275313963d6f67e - Ben Voigt
@Hans:是的,我所说的不是标准的C++。这是一个MSVC特定的扩展,可以正确处理Unicode输出,无论输出是文件还是控制台。我不知道是否可以通过setlocale()来实现这一点。当然,如果可能的话,我更喜欢符合标准的解决方案。 - Billy ONeal
你所说的是wprintf(),而不是iostream。微软采用了iostream类的所谓“标准”。在一句话中同时出现“标准”和setlocale是很少见的,这实在是一团糟。当你编写控制台模式应用程序时,有几件事情你要避免。比如做任何类似于图形的东西。还有试图在文本上花哨起来。你接下来的问题是控制台字体。 - Hans Passant
1
@Hans:我认为适当的Unicode支持并不是“试图在文本上变得花哨”。我可以通过自己调用Win32 API来解决这个问题。但如果CRT已经做到了正确的事情,那么不必重新发明轮子会很好。是的,wprintf也是一个msvc特定的扩展,但文章中提到的_setmode()调用应用于stdout,这使得合理地假设可能有一种方法使iostreams表现出相同的方式。 - Billy ONeal
1个回答

1

从记忆中来看,好像不是这样的。我曾经回答过一个问题,当时使用wprintf()可以正确打印,但是wcout<<却不行。


有什么想法可以获得等效的行为吗? - Billy ONeal
@Billy:尽管我做了很多努力,但我无法让他的wcout在所有情况下都正确打印。 - Puppy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接