Dalam percubaan untuk mencetak aksara UTF-8 dalam konsol Windows, seseorang mungkin menghadapi masalah apabila aksara tertentu dipotong atau dipaparkan dengan tidak betul. Ini berlaku kerana secara lalai, fungsi konsol Windows tidak mengendalikan aksara bukan ASCII.
Terdapat beberapa kaedah untuk menyelesaikan isu ini:
1. Menggunakan API WriteConsoleW:
API peringkat rendah ini membenarkan menulis data Unicode terus ke konsol. Walau bagaimanapun, ia memerlukan memastikan bahawa sasaran sememangnya konsol dan, menggunakan kaedah alternatif untuk output bukan konsol.
2. Menetapkan Mod Output Unicode:
Menggunakan fungsi seperti _setmode() dengan mod seperti _O_U16TEXT, seseorang boleh menetapkan deskriptor fail output kepada mod Unicode. Fungsi aksara lebar kemudiannya akan mengeluarkan data Unicode dengan betul ke konsol. Tetapi, fungsi aksara bukan lebar mesti dielakkan selepas itu.
3. Menetapkan Halaman Kod Output Konsol kepada CP_UTF8:
Dengan menetapkan halaman kod keluaran konsol kepada CP_UTF8, teks UTF-8 boleh dicetak terus menggunakan fungsi yang betul. Tetapi, fungsi peringkat lebih tinggi seperti basic_ostream
Mengenai Kaedah Ketiga:
Walaupun menetapkan CP_UTF8, aksara berbilang bait yang dipecah merentas berbilang penulisan konsol akan dianggap sebagai pengekodan tidak sah dan dipotong. Tingkah laku ini disebabkan oleh API konsol melihat data hanya dalam konteks setiap penulisan, oleh itu gagal mengambil kira aksara yang tidak lengkap.
Penyelesaian:
Satu penyelesaian yang berpotensi adalah dengan mencipta subkelas streambuf tersuai yang mengendalikan penukaran Unicode dengan betul, memandangkan bait mungkin datang secara berasingan dan mengekalkan keadaan penukaran.
Atas ialah kandungan terperinci Bagaimana untuk Mencegah Aksara Unikod Terpenggal dalam Konsol Windows?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!