在 Windows 控制台中正确打印 UTF-8 字符
本文旨在解决尝试在 Windows 控制台中打印 UTF-8 字符时所面临的挑战
问题描述
用户在使用特定代码片段显示德语字符时遇到困难:
<code class="c++">#include <stdio.h> #include <windows.h> 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); }</code>
尽管设置了输出代码页为 UTF-8,德语字符无法正确打印。
解决方案
要在 Windows 控制台中正确打印 Unicode 数据,有几种可用的方法:
故障排除
如果使用第三种方法输出不正确:
<code class="c++">putc('2'); putc('0'); // doesn't work with CP_UTF8 puts("20"); // correctly writes UTF-8 data to Windows console with CP_UTF8 </code>
这是因为在使用 CP_UTF8 时,控制台 API 将单独调用中传递的数据解释为非法编码。
要解决此问题,请考虑创建一个 Streambuf 子类,它可以准确处理多字节字符转换并维护写入之间的转换状态。
以上是如何在Windows控制台中使用德文字符正确打印UTF-8字符?的详细内容。更多信息请关注PHP中文网其他相关文章!