Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Mengeluarkan Rentetan UTF-8 dengan Betul ke `std::cout` pada Windows?

Bagaimana untuk Mengeluarkan Rentetan UTF-8 dengan Betul ke `std::cout` pada Windows?

Susan Sarandon
Susan Sarandonasal
2024-10-31 07:36:01338semak imbas

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

Berurusan dengan UTF-8 Strings dalam C pada Windows

Pengekodan rentetan sebagai UTF-8 digunakan secara meluas untuk aplikasi merentas platform. Walau bagaimanapun, mengeluarkan rentetan UTF-8 kepada std::cout pada Windows memberikan cabaran unik.

Gelagat lalai pada Windows adalah untuk std::cout untuk mengharapkan rentetan dalam format bukan Unikod. Apabila dibentangkan dengan rentetan UTF-8, ia memaparkan aksara yang rosak.

Untuk menangani isu ini, terdapat dua langkah utama:

  1. Tetapkan Halaman Kod Konsol kepada UTF-8 : Menggunakan fungsi SetConsoleOutputCP, maklumkan konsol bahawa strim bait masuk adalah dikodkan UTF-8.
  2. Dayakan Penimbalan Strim: Lumpuhkan kelakuan lalai std::basic_filebuf dalam Visual Studio, yang memecahkan jujukan bait UTF-8 dan menghantarnya sebagai bait individu. Untuk mengatasinya, setvbuf mendayakan penimbalan strim, memastikan keseluruhan rentetan dilalui secara keseluruhan.

Berikut ialah coretan kod yang disemak yang menggabungkan penyelesaian ini:

<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>

Selain itu untuk langkah ini, ambil perhatian bahawa fon raster dalam konsol Windows mungkin tidak memaparkan aksara Unicode bukan ASCII dengan betul. Untuk mendayakan pemaparan yang betul, adalah disyorkan untuk menukar kepada fon TrueType, yang kini menjadi lalai dalam Windows 10 dan versi yang lebih baru.

Atas ialah kandungan terperinci Bagaimana untuk Mengeluarkan Rentetan UTF-8 dengan Betul ke `std::cout` pada Windows?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn