Dengan aplikasi luas fail CSV dalam pertukaran data, semakin ramai pembangun telah mula memberi perhatian kepada pembacaan dan penulisan fail CSV. Sebagai bahasa yang sangat baik, Golang secara semula jadi menyediakan perpustakaan CSV sendiri untuk memudahkan pembangun membaca dan menulis fail CSV. Walau bagaimanapun, apabila pembangun menggunakan golang untuk membaca fail CSV, mereka kadangkala menghadapi aksara yang bercelaru Artikel ini akan membincangkan cara menyelesaikan masalah fail CSV yang bercelaru dalam golang.
Fail CSV ialah fail teks biasa dan kaedah pengekodannya boleh pelbagai, seperti UTF-8, GBK, GB2312, dsb. Dalam golang, membaca fail CSV menggunakan pengekodan UTF-8 secara lalai, jadi jika fail CSV menggunakan format pengekodan lain, aksara bercelaru mungkin berlaku.
Untuk masalah fail CSV yang bercelaru, terdapat penyelesaian berikut:
2.1 Tentukan pengekodan fail
Ya Elakkan aksara bercelaru dengan menetapkan pengekodan fail CSV. Mengambil pengekodan GBK sebagai contoh, kodnya adalah seperti berikut:
package main import ( "encoding/csv" "fmt" "io/ioutil" "log" ) func main() { f, err := ioutil.ReadFile("<filename>") if err != nil { log.Fatal(err) } r := csv.NewReader(transform.NewReader(bytes.NewReader(f), simplifiedchinese.GBK.NewDecoder())) records, err := r.ReadAll() if err != nil { log.Fatal(err) } fmt.Println(records) }
Seperti yang anda lihat, kod menggunakan fungsi ReadFile
untuk membaca fail CSV dan pada masa yang sama menentukan pengekodan fail sebagai GBK dengan menetapkan NewDecoder
.
2.2 Menggunakan perpustakaan pihak ketiga
Selain pustaka CSV terbina dalam, terdapat banyak perpustakaan CSV pihak ketiga yang sangat baik tersedia di golang. Apabila membaca fail CSV, anda boleh menggunakan perpustakaan ini untuk mengelakkan aksara yang bercelaru. Jika anda menggunakan pustaka go-csv
, anda boleh menetapkan kaedah pengekodan semasa membaca fail CSV:
package main import ( "fmt" "github.com/gocarina/gocsv" "os" ) type Record struct { Name string `csv:"name"` Age int `csv:"age"` } func main() { f, err := os.Open("<filename>") if err != nil { fmt.Println(err) return } var records []Record if err := gocsv.Unmarshal(f, &records); err != nil { fmt.Println(err) return } fmt.Println(records) }
Seperti yang anda lihat, kod menggunakan pustaka gocsv
untuk membaca fail CSV dan menetapkan ia apabila menghurai Pengekodan fail ialah GBK.
Masalah bercelaru fail CSV bukan sesuatu yang luar biasa dalam golang, tetapi dengan menyatakan pengekodan fail dan menggunakan perpustakaan pihak ketiga, kita boleh mengelakkannya dengan mudah Soalan ini. Jika anda juga menghadapi masalah fail CSV bercelaru, anda boleh mencuba dua penyelesaian di atas.
Atas ialah kandungan terperinci Bagaimana untuk menyelesaikan masalah bercelaru fail CSV golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!