Windows 控制台中正确的 UTF-8 字符打印
本文旨在解决尝试在 Windows 控制台中打印 UTF-8 字符时所面临的挑战Windows 控制台。
问题描述
用户在使用以下命令显示德语字符时遇到困难具体代码片段:
#include
#include
int main() {
SetConsoleOutputCP(CP_UTF8);
// German characters not appearing
char const* text = "aäbcdefghijklmnoöpqrsßtuüvwxyz";
int len = MultiByteToWideChar(CP_UTF8, 0, text, -1, 0, 0);
wchar_t *unicode_text = new wchar_t[len];
MultiByteToWideChar(CP_UTF8, 0, text, -1, unicode_text, len);
wprintf(L"%s", unicode_text);
}
尽管将输出代码页设置为 UTF-8,但德语字符仍无法正确打印。
解决方案
在Windows控制台,有以下几种可用方法:
故障排除
第三种方法输出不正确的情况:
putc('\302'); putc('\260'); // doesn't work with CP_UTF8
puts("\302\260"); // correctly writes UTF-8 data to Windows console with CP_UTF8
这是因为在使用 CP_UTF8 时,控制台 API 将单独调用中传递的数据解释为非法编码。
要解决此问题,请考虑创建准确处理多字节字符转换并维护写入之间的转换状态的 Streambuf 子类。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3