例如:

#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++;
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top