例:
#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字符串?
例:
#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字符串?
Answers:
我可以建议std::wcout
吗?
因此,如下所示:
std::cout << "ASCII and ANSI" << std::endl;
std::wcout << L"INSERT MULTIBYTE WCHAR* HERE" << std::endl;
您可以在此处的相关问题中找到更多信息。
您不能使用标准C ++设施可移植地打印宽字符串。
相反,您可以使用开源{fmt}库来可移植地打印Unicode文本。例如(https://godbolt.org/z/nccb6j):
#include <fmt/core.h>
int main() {
const char en[] = "Hello";
const char ru[] = "Привет";
fmt::print("{}\n{}\n", ru, en);
}
版画
Привет
Hello
这需要使用/utf-8
MSVC中的编译器选项进行编译。
为了进行比较,wcout
在Linux上进行写入:
wchar_t en[] = L"Hello";
wchar_t ru[] = L"Привет";
std::wcout << ru << std::endl << en;
可以将俄语文本音译为拉丁语(https://godbolt.org/z/za5zP8):
Privet
Hello
可以通过切换到使用UTF-8的语言环境来解决此特定问题,但是Windows上存在类似的问题,而仅使用标准工具无法解决。
免责声明:我是{fmt}的作者。
#include <iostream>
using namespace std;
void main()
{
setlocale(LC_ALL, "Russian");
cout << "\tДОБРО ПОЖАЛОВАТЬ В КИНО!\n";
}
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。然后在命令提示符控制台中安装字体,以便它可以使用您的语言进行读/写,并将控制台中的代码页更改为UTF-8,以便在cygwin已默认为UTF-8的情况下键入命令提示符“ chcp 65001”来正确显示。这是我在泰语中所做的。
#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 =(Thai)代码页在操作系统中,15 =字符串的大小
我的建议是除非有必要,否则避免将非英语宽字符打印到控制台,因为这并不容易。
您可以使用来打印宽字符wprintf
。
#include <iostream>
int main()
{
wchar_t en[] = L"Hello";
wchar_t ru[] = L"Привет"; //Russian language
wprintf(en);
wprintf(ru);
return 0;
}
输出:
你好
Привет