2010-03-22 138 views
47

实施例:如何将wchar_t值打印到控制台?

#include <iostream> 

using namespace std; 

int main() 
{ 
    wchar_t en[] = L"Hello"; 
    wchar_t ru[] = L"Привет"; //Russian language 
    cout << ru 
     << endl 
     << en; 
    return 0; 
} 

此代码仅打印像ADRESS HEX-值。 如何打印wchar_t字符串?

+0

的版本Ÿ首先相关的问题是http://stackoverflow.com/questions/1625531/c-wchar-to-stdcout-and-comparision – 2010-03-22 16:12:29

+0

什么操作系统,并使用什么控制台应用程序?有些控制台不支持Unicode。 – 2010-03-22 16:22:45

+0

Windows 7. 编译器MSVS2008 – zed91 2010-03-22 16:29:10

回答

53

编辑:如果您尝试编写无法用默认语言环境表示的文本,则不起作用。 :-(

使用std::wcout代替std::cout

wcout << ru << endl << en; 
+3

它只打印英文字符串。 俄罗斯呢? – zed91 2010-03-22 16:14:24

+8

控制台不会启用Unicode。输出重定向是挂断,它停留在8位char遗留下来。它只能在加载正确的控制台字体的俄文机器上输出正确的文本。 – 2010-03-22 17:19:02

+0

请注意,如果您尝试将其打印到Linux控制台,则很可能最终会出现乱码,因为大多数Linux系统不使用utf16编码。 – 2014-02-11 17:46:53

9

我可以建议std::wcout

所以,这样的事情:

std::cout << "ASCII and ANSI" << std::endl; 
std::wcout << L"INSERT MULTIBYTE WCHAR* HERE" << std::endl; 

您可能会发现在一个相关的问题here更多信息。

+0

检查这是否适用于俄语(复制粘贴它)。对我而言,它并不是。 – 2017-02-28 17:52:19

+0

看到这个关于混合'cout'和'wcout'弱点的帖子。 https://stackoverflow.com/questions/8947949/mixing-cout-and-wcout-in-same-program – 2017-08-23 20:46:15

0

你可以用用,实际上是充满了UTF-8字符正常的字符数组。这应该允许跨语言的混合字符。

-3

我们不是在寻找简便的方法!

int i = 0; 
while (ru[i]) { 
    std::cout << (char)ru[i]; 
    i++; 
} 
+1

你能解释一下吗? – 2014-10-15 03:16:19

+2

如果这样工作,就不会有宽字符的原因... – opetroch 2015-09-20 21:48:37

0
#include <iostream> 
using namespace std; 
void main() 
{ 
setlocale(LC_ALL, "Russian"); 
cout << "\tДОБРО ПОЖАЛОВАТЬ В КИНО!\n"; 
} 
+0

你可以通过提供一个解释来与你的代码,以改善这个答案。 – 2016-08-11 12:09:43

+0

欢迎来到Stack Overflow!虽然这段代码可能有助于解决这个问题,但它并没有解释_why_和/或_how_它是如何回答这个问题的。提供这种附加背景将显着提高其长期价值。请[编辑]您的答案以添加解释,包括适用的限制和假设。 – 2016-08-11 16:27:19