Rumah > Artikel > pembangunan bahagian belakang > Bagaimanakah anda mengendalikan Byte Order Marks (BOM) apabila membaca fail Unicode dalam Go?
Membaca Fail dengan Tanda Pesanan Bait (BOM) dalam Go
Apabila membaca fail Unicode, menghadapi Tanda Pesanan Bait (BOM) boleh memerlukan pengendalian khas. Daripada menyemak BOM secara manual dan membuangnya, adakah terdapat kaedah piawai atau disyorkan untuk menangani BOM dalam Go?
Cara Standard untuk Membaca BOM
Di peringkat perpustakaan teras, tidak ada cara piawai yang dilaksanakan untuk mengendalikan BOM secara khusus. Walau bagaimanapun, perpustakaan Go standard cemerlang dalam melaksanakan operasi peringkat rendah, menjadikannya mudah untuk melaksanakan mekanisme pengendalian BOM tersuai.
Contoh Pelaksanaan
Menggunakan Buffered Pembaca:
Pembaca buffer menawarkan pendekatan yang mudah untuk mengurus BOM. Dengan membalut pembaca buffer di sekeliling deskriptor fail input, BOM boleh disemak dan dibuang dengan cekap, seperti yang dilihat dalam contoh berikut:
<code class="go">import ( "bufio" "os" "log" ) func main() { fd, err := os.Open("filename") if err != nil { log.Fatal(err) } defer closeOrDie(fd) br := bufio.NewReader(fd) r, _, err := br.ReadRune() if err != nil { log.Fatal(err) } if r != '\uFEFF' { br.UnreadRune() // Not a BOM -- put the rune back } // Now work with br as you would do with fd // ... }</code>
Menggunakan Antara Muka io.Seeker:
Untuk objek yang melaksanakan antara muka io.Seeker, pendekatan alternatif ialah membaca tiga bait pertama fail dan menyemak corak BOM. Jika BOM tidak ditemui, deskriptor fail boleh digulung semula ke permulaan menggunakan io.Seek(), seperti yang digambarkan di bawah:
<code class="go">import ( "os" "log" ) func main() { fd, err := os.Open("filename") if err != nil { log.Fatal(err) } defer closeOrDie(fd) bom := [3]byte _, err = io.ReadFull(fd, bom[:]) if err != nil { log.Fatal(err) } if bom[0] != 0xef || bom[1] != 0xbb || bom[2] != 0xbf { _, err = fd.Seek(0, 0) // Not a BOM -- seek back to the beginning if err != nil { log.Fatal(err) } } // The next read operation on fd will read real data // ... }</code>
Perhatikan bahawa contoh ini menganggap fail dikodkan dalam UTF-8. Jika berurusan dengan pengekodan lain atau tidak diketahui, logik lanjut mungkin diperlukan.
Atas ialah kandungan terperinci Bagaimanakah anda mengendalikan Byte Order Marks (BOM) apabila membaca fail Unicode dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!