Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Menukar UTF-8 dengan Betul kepada Pengekodan ISO-8859-1 Tanpa Kehilangan Data?

Bagaimanakah Saya Boleh Menukar UTF-8 dengan Betul kepada Pengekodan ISO-8859-1 Tanpa Kehilangan Data?

Mary-Kate Olsen
Mary-Kate Olsenasal
2025-01-08 14:27:41866semak imbas

How Can I Correctly Convert UTF-8 to ISO-8859-1 Encoding Without Data Loss?

Menyelesaikan Cabaran Penukaran Pengekodan UTF-8 kepada ISO-8859-1

Menukar rentetan aksara antara pengekodan yang berbeza, terutamanya apabila aksara bukan ASCII terlibat, selalunya menimbulkan kesukaran. Masalah yang kerap berlaku ialah menukar daripada UTF-8 kepada ISO-8859-1 (Latin-1). Penukaran yang salah mungkin mengubah "ÄäÖöÕõÜü" kepada sesuatu seperti "Ã?äÃ?öÃ?õÃ?ü".

Ini berlaku kerana UTF-8 menggunakan pengekodan panjang berubah-ubah, manakala ISO-8859-1 ialah pengekodan bait tunggal tetap. Penukaran terus menggunakan kaedah seperti GetString() boleh merosakkan aksara bukan ASCII.

Penyelesaian terletak pada menggunakan kaedah Encoding.Convert. Ini mengendalikan proses penukaran dengan betul: ia mengambil tatasusunan UTF-8 bait, mengubahnya menjadi tatasusunan bait ISO-8859-1, dan kemudian menyahkod tatasusunan ini menggunakan pengekodan sasaran.

Berikut ialah coretan kod yang diperbetulkan:

<code class="language-csharp">Encoding iso = Encoding.GetEncoding("ISO-8859-1");
Encoding utf8 = Encoding.UTF8;
byte[] utfBytes = utf8.GetBytes(Message);
byte[] isoBytes = Encoding.Convert(utf8, iso, utfBytes);
string msg = iso.GetString(isoBytes);</code>

Pendekatan ini memastikan penukaran aksara bukan ASCII yang tepat, menghasilkan output "ÄäÖöÕõÜü" yang dijangkakan daripada input contoh. Kuncinya ialah manipulasi tatasusunan bait perantaraan yang disediakan oleh Encoding.Convert sebelum penyahkodan akhir.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menukar UTF-8 dengan Betul kepada Pengekodan ISO-8859-1 Tanpa Kehilangan Data?. 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