Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用WriteConsole打印Unicode日文字符_C++_Windows_C++11_Winapi - Fatal编程技术网

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);
}