我怎么可以打印的wchar_t值控制台?
-
21-09-2019 - |
题
例如:
#include <iostream>
using namespace std;
int main()
{
wchar_t en[] = L"Hello";
wchar_t ru[] = L"Привет"; //Russian language
cout << ru
<< endl
<< en;
return 0;
}
这个代码只打印六值喜欢的地址。如何打印wchar_t串?
解决方案
编辑:如果你试图不能在默认的语言环境来表示文字写这不起作用。 : - (
使用std::wcout
代替std::cout
。
wcout << ru << endl << en;
其他提示
我可以建议 std::wcout
?
因此,事情是这样的:
std::cout << "ASCII and ANSI" << std::endl;
std::wcout << L"INSERT MULTIBYTE WCHAR* HERE" << std::endl;
你可能会找到更多的信息,在一个相关的问题 在这里,.
您可以使用使用,实际上是充满了UTF-8字符的正常字符数组。这应该允许跨语言混合字符。
#include <iostream>
using namespace std;
void main()
{
setlocale(LC_ALL, "Russian");
cout << "\tДОБРО ПОЖАЛОВАТЬ В КИНО!\n";
}
视窗具有非常混乱信息。你应该学会在Windows编程之前,从Unix / Linux下的C / C ++的概念。
在UTF-16是所谓的宽字符但wprintf()或wcout(固定16位存储器大小为wchar_t存储字符)将永远不会正确打印非英文宽字符因为在UTF-16无控制台将输出。在当前区域设置窗口将输出,而在UTF-8的Unix / Linux将输出,都是多字节。所以,你必须在打印前宽字符转换为多字节。 Unix命令wcstombs()不工作在Windows上,使用调用WideCharToMultiByte()代替。
首先,你需要将文件转换为UTF-8使用记事本或其他编辑器。然后,在命令提示符控制台安装字体,以便它可以在控制台读取你的语言和更改代码页/写为UTF-8通过键入命令提示符下发生“chcp 65001”正确显示时的cygwin已经被默认为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 =大小的字符串的
我的建议是为了避免印刷非英文宽字符到控制台除非必要的,因为它是不容易的。
可以打印与宽字符 wprintf
。
#include <iostream>
int main()
{
wchar_t en[] = L"Hello";
wchar_t ru[] = L"Привет"; //Russian language
wprintf(en);
wprintf(ru);
return 0;
}
输出:
您好,点击 Привет
我们不是在寻找简便的方法!
int i = 0;
while (ru[i]) {
std::cout << (char)ru[i];
i++;
}
不隶属于 StackOverflow