UTF-8 Output dalam Windows: Panduan Komprehensif
Windows membentangkan cabaran unik apabila menulis aplikasi merentas platform dalam C yang bergantung pada Rentetan berkod UTF-8. Tidak seperti sistem Unix, yang secara automatik mentafsir rentetan 8-bit sebagai UTF-8, Windows memerlukan konfigurasi khusus untuk melakukan perkara yang sama.
Pertimbangkan kod berikut:
<code class="cpp">#include <string> #include <iostream> int main() { std::string test = u8"Greek: αβγδ; German: Übergrößenträger"; std::cout << test; return 0; }</code>
Pada sistem Unix, kod ini akan menjadikan aksara yang dikehendaki dengan betul. Walau bagaimanapun, pada Windows, ia akan memaparkan teks bercelaru kerana jangkaan lalai std::cout bagi rentetan 8-bit dalam Latin-1 atau format bukan Unikod yang serupa.
Untuk menyelesaikan isu ini, Windows memerlukan dua langkah konfigurasi :
1. Menetapkan Halaman Kod Konsol kepada UTF-8
Ini memberitahu konsol untuk mentafsir strim bait yang diterimanya sebagai UTF-8:
<code class="cpp">SetConsoleOutputCP(CP_UTF8);</code>
2. Mendayakan Penimbalan dalam std::cout
Pelaksanaan Visual Studio STL bagi std::basic_filebuf boleh melepasi urutan UTF-8 sebagai bait individu, yang membawa kepada tafsiran konsol yang salah. Dengan mendayakan penimbalan, kami memastikan bahawa rentetan dihantar secara keseluruhannya:
<code class="cpp">setvbuf(stdout, nullptr, _IOFBF, 1000);</code>
Dengan konfigurasi ini, rentetan UTF-8 akan dipaparkan dengan tepat pada konsol Windows. Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa konsol Windows masih mempunyai isu warisan:
Oleh menggabungkan kedua-dua kod dan konteks, jawapan yang disemak ini menyediakan penyelesaian langkah demi langkah yang komprehensif untuk mencetak rentetan UTF-8 pada Windows, menangani pertimbangan sejarah dan moden.
Atas ialah kandungan terperinci Bagaimana untuk Memaparkan Rentetan UTF-8 dengan Betul pada Windows Console: Panduan Komprehensif?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!