C++ 使用WriteConsole打印Unicode日文字符
所以,我想印一些日语字符。我尽了一切可能。我错过了什么C++ 使用WriteConsole打印Unicode日文字符,c++,windows,c++11,winapi,C++,Windows,C++11,Winapi,所以,我想印一些日语字符。我尽了一切可能。我错过了什么 #include <windows.h> #include <string> template<typename T> void printW(const T* text) { WriteConsoleW(GetStdHandle(STD_OUTPUT_HANDLE), text, std::char_traits<T>::length(text), 0, 0); } templa
#include <windows.h>
#include <string>
template<typename T>
void printW(const T* text) {
WriteConsoleW(GetStdHandle(STD_OUTPUT_HANDLE), text, std::char_traits<T>::length(text), 0, 0);
}
template<typename T>
void print(const T* text) {
WriteConsole(GetStdHandle(STD_OUTPUT_HANDLE), text, std::char_traits<T>::length(text), 0, 0);
}
int main()
{
//const char* text = "こんにちは\n";
const wchar_t* textL = L"こんにちは\n";
const char16_t* textu = u"こんにちは\n";
const char32_t* textU = U"こんにちは\n";
//printW(text);
printW(textL);
printW(textu);
printW(textU);
}
#包括
#包括
模板
无效打印W(常量T*文本){
WriteConsoleW(GetStdHandle(STD_输出_句柄),text,STD::char_traits::length(text),0,0);
}
模板
无效打印(常量*文本){
WriteConsole(GetStdHandle(STD\u输出\u句柄),text,STD::char\u traits::length(text),0,0);
}
int main()
{
//常量字符*文本=”こんにちは\n”;
常量wchar_t*textL=L“こんにちは\n”;
常量字符16_t*textu=u“こんにちは\n”;
常量字符32_t*textU=U“こんにちは\n”;
//printW(文本);
printW(textL);
printW(textu);
printW(textU);
}
不需要WinAPI,而且您使用了错误的类型
#include <iostream>
#include <string>
int main()
{
std::string text{u8"こんにちは"};
std::cout << text;
}
#包括
#包括
int main()
{
std::字符串文本{u8“こんにちは"};
std::难道你不能测试你的主机是否支持日语字符?我认为这些答案在Windows中都不起作用。请查看此链接:Windows不支持日语字符UTF8@BarmakShemirani:Windows支持UTF-8(例如,整个.NET元数据使用UTF-8编码)。控制台代码页65001的实现(UTF-8)有限制。@I不可检测我不知道.NET有什么功能。我的意思是WinAPI不支持UTF-8屏幕输出或UTF-8键盘输入。您可以操作UTF-8或任何其他数据,并使用UTF-16转换。也许一些.NET的东西可以直接使用UTF-8@BarmakShemirani:说“Windows不支持UTF8”有点牵强“。确实如此,但并非无处不在。Windows的本机Unicode编码是UTF-16LE,无论何时访问系统服务,这都是您需要使用的字符编码。但是,像这样的函数完全支持UTF-8(这是Microsoft的CLR实现用于en-/解码.NET元数据的功能)。我想让您解释一下u8
在MSVC上做了什么,这是一个兼容C++11的编译器。请向我解释一下u8
与wchar\t
的概念是如何完全相同的,因为它不是。
#include <windows.h>
#include <string>
template<typename T>
void print(const T* text) {
WriteConsole(GetStdHandle(STD_OUTPUT_HANDLE), text, std::char_traits<T>::length(text), 0, 0);
}
int main()
{
auto text = u8"こんにちは\n";
print(text);
}