首页 >后端开发 >C++ >如何在 Windows 上正确输出 UTF-8 字符串到 `std::cout`?

如何在 Windows 上正确输出 UTF-8 字符串到 `std::cout`?

Susan Sarandon
Susan Sarandon原创
2024-10-31 07:36:01473浏览

How to Output UTF-8 Strings Correctly to `std::cout` on Windows?

在 Windows 上用 C 处理 UTF-8 字符串

将字符串编码为 UTF-8 广泛用于跨平台应用程序。然而,在 Windows 上将 UTF-8 字符串输出到 std::cout 会带来独特的挑战。

Windows 上的默认行为是 std::cout 期望非 Unicode 格式的字符串。当提供 UTF-8 字符串时,它会显示损坏的字符。

要解决此问题,有两个主要步骤:

  1. 将控制台代码页设置为 UTF-8 : 使用 SetConsoleOutputCP 函数,通知控制台传入的字节流是 UTF-8 编码的。
  2. 启用流缓冲: 禁用 Visual 中 std::basic_filebuf 的默认行为Studio,它分解 UTF-8 字节序列并将它们作为单独的字节传递。为了克服这个问题,setvbuf 启用流缓冲,确保整个字符串作为一个整体传递。

这里是一个包含这些解决方案的修改后的代码片段:

<code class="cpp">#include <string>
#include <iostream>
#include <Windows.h>
#include <cstdio>

int main() {
    // Set console code page to UTF-8
    SetConsoleOutputCP(CP_UTF8);

    // Enable buffering to prevent byte-by-byte transmission
    setvbuf(stdout, nullptr, _IOFBF, 1000);

    // Output UTF-8 string
    std::string test = u8"Greek: αβγδ; German: Übergrößenträger";
    std::cout << test << std::endl;

    return 0;
}</code>

此外对于这些步骤,请注意 Windows 控制台中的光栅字体可能无法正确显示非 ASCII Unicode 字符。为了实现正确的渲染,建议切换到 TrueType 字体,该字体现在是 Windows 10 及更高版本中的默认字体。

以上是如何在 Windows 上正确输出 UTF-8 字符串到 `std::cout`?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn