使用WriteConsoleW打印Unicode日语字符

时间:2016-05-10 00:10:54

标签: 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);
}

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

1 个答案:

答案 0 :(得分:-5)

不需要WinAPI,你也使用了错误的类型。

#include <iostream>
#include <string>

int main() 
{
    std::string text{u8"こんにちは"};
    std::cout << text;
}

Live example

如果您需要使用WinAPI,则需要进行最少的修改:

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

免责声明:未在实际的Windows机器上测试