在控制台C++中打印朝鲜语
Printing out Korean in console C++
我在打印韩语时遇到问题。我试过各种方法都没有用。我试过
1.
cout << "한글" << endl;
2.
wcout << "한글" << endl;
3.
wprintf(L"한글n");
4.
setlocale(LC_ALL, "korean");
wprintf("한글");
等等。但所有这些印刷品都是"错误的"。我使用的是MinGW编译器,操作系统是Windows7。
p.S奇怪的Java打印出韩国罚款,
String kor = "한글";
System.out.println(kor);
工作。
在打印文本之前,将控制台代码页设置为utf-8
::SetConsoleOutputCP(65001)
由于您使用的是Windows 7,因此可以使用WriteConsoleW,它是Windows API的一部分。#include <windows.h>
并尝试以下代码:
DWORD numCharsToWrite = str.length();
LPDWORD numCharsWritten = NULL;
WriteConsoleW(GetStdHandle(STD_OUTPUT_HANDLE), str.c_str(), numCharsToWrite, numCharsWritten, NULL);
其中str是std::wstring
有关WriteConsoleW的更多信息:https://msdn.microsoft.com/en-us/library/windows/desktop/ms687401%28v=vs.85%29.aspx
在尝试了其他方法后,这对我有效。
问题是,在很多地方这可能会被破坏。
这是我不久前发布的答案(包括韩语(。Answear适用于MSVC,但同样适用于MinGW(编译器开关不同,区域设置名称可能不同(。
这里有5个陷阱使这很难:
- 源代码编码。源必须使用支持所有必需字符的编码。现在建议使用UTF-8。最好确保您的编辑器(IDE(配置正确,以强制执行源代码编码
- 您必须通知编译器源文件的编码是什么。对于gcc,它是:
-finput-charset=utf-8
(默认值( - 可执行文件使用的编码。您必须定义在最终可执行文件中应该对哪种编码字符串文字进行编码。此编码还应包含必需的字符。其中
UTF-8
也是最好的。Gcc选项为-fexec-charset=utf-8
- 当您运行应用程序时,您必须通知标准库在哪种编码中定义了字符串文字,或者在程序逻辑中使用了什么编码。因此,在代码执行之初的某个地方,您需要这样的东西(这里强制使用UTF-8(:
std::locale::global(std::locale{".utf-8"});
- 最后,您必须指示stream应该使用什么样的编码。因此,对于
std::cout
和std::cin
,您应该设置系统默认的区域设置:
auto streamLocale = std::locale{""};
// this impacts date/time/floating point formats, so you may want tweak it just to use sepecyfic encoding and use C-loclae for formating
std::cout.imbue(streamLocale);
std::cin.imbue(streamLocale);
在这之后,一切都应该按照需要工作,而不需要显式进行转换的代码
由于有5个地方可以犯错,这就是人们对它感到困扰的原因,互联网上充斥着"错误";破解";解决方案。
请注意,如果系统未配置为支持所有需要的字符(例如设置了错误的代码页(,则无法转换的thsi配置字符将被问号替换。
相关文章:
- 如何循环打印顶点结构
- 为什么在popback()操作之后,它仍然打印完整的矢量
- 如何在c++中打印目录
- 有一个打印语句的函数是一种糟糕的编程实践吗
- 在线编译器中的分段C++没有打印消息
- 在C++中打印指向不同基元数据类型的指针的内存地址
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值
- 如何将结构插入到集合中并打印集合的成员
- 在循环C++中指定字符串之后,不会打印该字符串
- 以螺旋方式打印矩阵的程序.(工作不好)
- 从控制台中删除最后打印的元素
- 如何使用Crypto++并为RSA返回可打印的字节/字符数组
- 如何仅使用对象名称打印特定于对象的成员
- 回溯C++不打印函数,因此文件
- 在一定长度后从数组中打印时缺少整数
- 为什么这个 c++ 代码打印出长度 5,当我打印出字符串时,程序会自动终止?
- 在gem5中打印文件中的所有cache_blocks
- 打印数字图案
- 是否可以在控制台中使用C打印孟加拉语
- 在控制台C++中打印朝鲜语