示例:
#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。如何打印wchar_t字符串?
发布于 2010-03-23 00:11:22
编辑:如果您正在尝试编写不能以默认语言环境表示的文本,则此选项不起作用。:-(
使用std::wcout
而不是std::cout
。
wcout << ru << endl << en;
发布于 2010-03-23 00:10:53
我可以推荐std::wcout
吗?
所以,就像这样:
std::cout << "ASCII and ANSI" << std::endl;
std::wcout << L"INSERT MULTIBYTE WCHAR* HERE" << std::endl;
您可能会在相关的问题here中找到更多信息。
发布于 2018-09-21 18:57:25
Windows有非常令人困惑的信息。在Windows中编程之前,你应该从Unix/Linux中学习C/C++的概念。
wchar_t将字符存储在UTF-16中,这是一个固定的16位内存大小,称为宽字符,但是wprintf()或wcout()永远不会正确打印非英语宽字符,因为没有控制台将以UTF-16输出。Windows将以当前语言环境输出,而unix/linux将以UTF-8输出,均为多字节。因此您必须在打印前将宽字符转换为多字节。unix命令wcstombs()在Windows上不起作用,请使用WideCharToMultiByte()。
首先,您需要使用记事本或其他编辑器将文件转换为UTF-8。然后在命令提示符控制台中安装字体,以便它可以以您的语言进行读/写,并在cygwin已经默认为UTF-8的情况下,通过在命令提示符"chcp 65001“中键入命令提示符,将控制台中的代码页更改为UTF-8以正确显示。这是我用泰语做的。
#include <windows.h>
#include <stdio.h>
int main()
{
wchar_t* in=L"ทดสอบ"; // thai language
char* out=(char *)malloc(15);
WideCharToMultiByte(874, 0, in, 15, out, 15, NULL, NULL);
printf(out); // result is correctly in Thai although not neat
}
请注意,操作系统中的874=(泰语)代码页、字符串的15=size
我的建议是避免打印非英语宽字符控制台,除非有必要,因为这是不容易的。
https://stackoverflow.com/questions/2493785
复制相似问题