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

Susan Sarandon
Lepaskan: 2024-10-31 07:36:01
asal
337 orang telah melayarinya

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!