Pencetakan Aksara UTF-8 yang Betul dalam Konsol Windows
Artikel ini bertujuan untuk menangani cabaran yang dihadapi apabila cuba mencetak aksara UTF-8 dalam konsol Windows.
Penerangan Isu
Pengguna telah menghadapi kesukaran untuk memaparkan aksara Jerman menggunakan coretan kod tertentu:
<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>
Walaupun menetapkan halaman kod keluaran ke UTF-8, aksara Jerman tidak dicetak dengan betul.
Penyelesaian
Untuk mencetak data Unicode dengan betul dalam konsol Windows, terdapat beberapa kaedah yang tersedia:
Menyelesaikan masalah
Sekiranya output yang salah dengan kaedah ketiga:
<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>
Ini kerana API konsol mentafsir data yang dihantar dalam panggilan berasingan sebagai pengekodan haram apabila menggunakan CP_UTF8.
Untuk menyelesaikan masalah ini, pertimbangkan untuk mencipta subkelas streambuf yang mengendalikan penukaran aksara berbilangbait dengan tepat dan mengekalkan keadaan penukaran antara penulisan.
Atas ialah kandungan terperinci Bagaimana untuk Mencetak Aksara UTF-8 dengan Betul dalam Konsol Windows dengan Aksara Jerman?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!