Rumah >pembangunan bahagian belakang >Golang >Apakah yang perlu saya lakukan jika golang membaca fail bercelaru?
Sebagai bahasa pembangunan, golang boleh dikatakan agak mudah dari segi membaca dan menulis fail, tetapi masih terdapat beberapa masalah yang dihadapi dalam pembangunan sebenar, seperti aksara bercelaru selepas fail dibaca. Artikel ini akan memperkenalkan sebab dan penyelesaian untuk membaca fail bercelaru dalam golang.
Apabila kita menggunakan golang untuk membaca fail, kadang-kadang kandungan selepas membaca akan bercelaru, seperti yang ditunjukkan dalam rajah di bawah:
Sebagai contoh, kita boleh mencipta fail teks txt melalui alat baris arahan cmd sistem Windows dan menyimpannya menggunakan format pengekodan "gbk", seperti ditunjukkan di bawah:
Kemudian, kita menggunakan program golang untuk membaca, seperti yang ditunjukkan dalam rajah di bawah: Dapat didapati bahawa kandungan fail yang dibaca adalah bercelaru Ini disebabkan oleh Format pengekodan lalai golang ialah UTF-8. 2.2. Endianness tidak dikendalikan dengan betulDalam golang, apabila membaca fail, jika format pengekodan ialah UTF-16 (termasuk UTF-16LE dan UTF-16BE), anda perlu mengendalikan endian dengan betul . UTF-16LE bermaksud bahawa dalam ingatan, bait tertib rendah disimpan di hadapan dan bait tertib tinggi disimpan di belakang, manakala UTF-16BE adalah sebaliknya.
Jika kami tidak mengendalikan susunan bait dengan betul semasa membaca fail UTF-16, aksara bercelaru akan muncul. 2.3. Isu penukaran format pengekodan lainKadangkala, kami mungkin perlu menukar fail dalam format lain (seperti CSV, XML, dll.) ke dalam format yang disokong oleh golang untuk dibaca, tetapi semasa penukaran Mungkin terdapat masalah penukaran format pengekodan yang mengakibatkan aksara bercelaru.
3. Penyelesaian
3.1 Sahkan format pengekodan fail dan bacanya
golang menyediakan kaedah
pakejKodnya adalah seperti berikut:
ioutil
di mana kaedah ReadFile
akan menghasilkan pengekodan baharu. format berdasarkan format pengekodan yang ditentukan bufio.NewReader
objek, hanya gunakan objek ini untuk membaca fail. ioutil.NopCloser
funcĀ ReadFileWithCharset(filenameĀ string,Ā charsetĀ string)Ā ([]byte,Ā error)Ā { Ā Ā Ā Ā f,Ā errĀ :=Ā os.Open(filename) Ā Ā Ā Ā ifĀ errĀ !=Ā nilĀ { Ā Ā Ā Ā Ā Ā Ā Ā returnĀ nil,Ā err Ā Ā Ā Ā } Ā Ā Ā Ā deferĀ f.Close() Ā Ā Ā Ā r,Ā errĀ :=Ā charset.NewReader(f) Ā Ā Ā Ā ifĀ errĀ !=Ā nilĀ { Ā Ā Ā Ā Ā Ā Ā Ā returnĀ nil,Ā err Ā Ā Ā Ā } Ā Ā Ā Ā deferĀ r.Close() Ā Ā Ā Ā returnĀ ioutil.ReadAll(r) }untuk penukaran pesanan bait
charset.NewReader
Apabila menggunakan pustaka ReadCloser
, anda perlu ambil perhatian bahawa panjang maksimum dalam pustaka ialah 32767 bait saiz melebihi had ini , maka bacaan bersegmen diperlukan.
unicode/utf16
3.3. Gunakan pustaka unicode/utf16
untuk penukaran format pengekodan Pustaka
packageĀ main importĀ ( Ā Ā Ā Ā "fmt" Ā Ā Ā Ā "io/ioutil" Ā Ā Ā Ā "unicode/utf16" ) funcĀ readUTF16File(filenameĀ string)Ā ([]byte,Ā error)Ā { Ā Ā Ā Ā data,Ā errĀ :=Ā ioutil.ReadFile(filename) Ā Ā Ā Ā ifĀ errĀ !=Ā nilĀ { Ā Ā Ā Ā Ā Ā Ā Ā returnĀ nil,Ā err Ā Ā Ā Ā } Ā Ā Ā Ā uĀ :=Ā utf16.Decode(data) Ā Ā Ā Ā returnĀ []byte(string(u)),Ā nil } funcĀ main()Ā { Ā Ā Ā Ā data,Ā _Ā :=Ā readUTF16File("test.txt") Ā Ā Ā Ā fmt.Println(string(data)) }
golang.org/x/text
4 Ringkasangolang.org/x/text
untuk penukaran pesanan bait untuk isu penukaran format pengekodan yang lain; Anda boleh menggunakan pustaka
untuk penukaran. Melalui kaedah di atas, masalah membaca aksara bercelaru dalam fail golang dapat diselesaikan dengan berkesan dan kecekapan pembangunan dipertingkatkan.packageĀ main import( Ā Ā Ā Ā "fmt" Ā Ā Ā Ā "io/ioutil" Ā Ā Ā Ā "golang.org/x/text/encoding/charmap" ) funcĀ ReadFileWithCharset(filenameĀ string,Ā charsetĀ string)Ā ([]byte,Ā error)Ā { Ā Ā Ā Ā data,Ā errĀ :=Ā ioutil.ReadFile(filename) Ā Ā Ā Ā ifĀ errĀ !=Ā nilĀ { Ā Ā Ā Ā Ā Ā Ā Ā returnĀ nil,Ā err Ā Ā Ā Ā } Ā Ā Ā Ā charmapĀ :=Ā charmap.Windows1252.NewDecoder() Ā Ā Ā Ā returnĀ charmap.Bytes(data) } funcĀ main()Ā { Ā Ā Ā Ā data,_:=ReadFileWithCharset("test.txt","UTF-8") Ā Ā Ā Ā fmt.Println(string(data)) }
Atas ialah kandungan terperinci Apakah yang perlu saya lakukan jika golang membaca fail bercelaru?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!