我尝试在win32console应用程序中输出UTF-16字符串到控制台,但是我无法更改输出流的编码,我尝试使用SetConsoleOutputCP()函数但是当我使用下一个代码进行测试时
std::wcout << GetConsoleOutputCP() << std::endl;//output 866
SetConsoleOutputCP(CP_WINUNICODE); //if i set CP_UTF8 it works
std::wcout << GetConsoleOutputCP() << std::endl;//output 866
我得到两个案例相同的结果(866)。当我尝试设置CP_UTF8
时,它工作正常,但我需要UTF-16,为什么我的尝试失败,如何将输出流的编码设置为UTF-16?
答案 0 :(得分:1)
您无法将编码设置为UTF-16,因为cout
和wcout
都写入相同的面向字节的流(STD_OUTPUT_HANDLE)并且仅面向字节编码得到支持。 UTF-16是面向字的。这意味着可以写入标准输出的唯一Unicode编码是UTF-8。