Rumah >Java >javaTutorial >Bagaimana untuk Mengekalkan BOM Semasa Membaca Fail UTF-8 di Java?
Membaca UTF-8 dengan Penanda BOM: Memahami Output BOM Tidak Dijangka
Apabila membaca fail yang dikodkan dalam UTF-8 dengan Pesanan Bait Tandakan (BOM), adalah mungkin untuk menemui BOM yang disertakan dalam rentetan output. Ini berlaku kerana BOM, pengecam Unicode, disimpan sebagai jujukan bait tertentu pada permulaan fail.
Dalam kod Java yang diberikan, FileReader dan BufferedReader digunakan dengan sewajarnya untuk mengendalikan pembacaan fail UTF-8 . Walau bagaimanapun, isu timbul dalam baris berikutnya:
text = new String(tmp.getBytes(), "UTF-8");
Barisan ini cuba menyahkod bait yang disimpan dalam rentetan tmp menggunakan set aksara UTF-8. Walau bagaimanapun, kaedah getBytes() pada String tidak mengekalkan penanda BOM daripada fail asal. Akibatnya, proses penyahkodan mengabaikan BOM, dan ia hilang dengan berkesan.
Untuk mengekalkan penanda BOM dalam rentetan output, sedikit pelarasan pada kod diperlukan:
byte[] bytes = tmp.getBytes("UTF-8"); if (isUTF8WithBOM(bytes)) { text = new String(bytes, 3, bytes.length - 3); } else { text = new String(bytes, "UTF-8"); }
Kaedah isUTF8WithBOM menyemak sama ada tatasusunan bait bermula dengan urutan BOM UTF-8 (0xEF, 0xBB, 0xBF). Jika benar, BOM dikeluarkan dengan menghiris tatasusunan bait untuk bermula dari bait ketiga. Ini memastikan bahawa proses penyahkodan seterusnya termasuk penanda BOM dalam rentetan output.
Atas ialah kandungan terperinci Bagaimana untuk Mengekalkan BOM Semasa Membaca Fail UTF-8 di Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!