首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何将wchar_t值打印到控制台?

如何将wchar_t值打印到控制台?
EN

Stack Overflow用户
提问于 2010-03-23 00:08:02
回答 5查看 87.9K关注 0票数 83

示例:

#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字符串?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-03-23 00:11:22

编辑:如果您正在尝试编写不能以默认语言环境表示的文本,则此选项不起作用。:-(

使用std::wcout而不是std::cout

wcout << ru << endl << en;
票数 101
EN

Stack Overflow用户

发布于 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中找到更多信息。

票数 16
EN

Stack Overflow用户

发布于 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

我的建议是避免打印非英语宽字符控制台,除非有必要,因为这是不容易的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2493785

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档