Pengesahan Jujukan Bait Tidak Sah dalam Go
Apabila cuba menukar kepingan bait ([]bait) kepada rentetan dalam Go, ia adalah penting untuk mengendalikan senario di mana jujukan bait tidak boleh ditukar kepada Unicode yang sah rentetan.
Penyelesaian:
1. Semakan Kesahan UTF-8:
Seperti yang dicadangkan oleh Tim Cooper, anda boleh menggunakan fungsi utf8.Valid untuk menentukan sama ada kepingan bait ialah urutan UTF-8 yang sah. Jika utf8.Valid mengembalikan palsu, ia menunjukkan kehadiran bait tidak sah.
2. Pengendalian Bait Bukan UTF-8:
Bertentangan dengan kepercayaan popular, bait bukan UTF-8 masih boleh disimpan dalam rentetan Go. Ini kerana rentetan dalam Go pada asasnya adalah hirisan bait baca sahaja. Ia boleh mengandungi bait UTF-8 yang tidak sah, yang boleh diakses, dicetak atau ditukar kembali kepada kepingan bait tanpa masalah.
Walau bagaimanapun, Go melakukan penyahkodan UTF-8 dalam senario tertentu:
Nota: Penukaran ini tidak pernah menyebabkan panik, jadi anda hanya perlu menyemak kesahihan UTF-8 secara aktif jika ia penting untuk permohonan anda (mis., jika U FFFD tidak boleh diterima dan ralat harus dibuang).
Sampel Kod:
Kod berikut menunjukkan cara Go mengendalikan kepingan bait yang mengandungi UTF-8 tidak sah:
package main import "fmt" func main() { a := []byte{0xff} // Invalid UTF-8 byte s := string(a) fmt.Println(s) // � for _, r := range s { // Range loop replaces invalid UTF-8 with U+FFFD fmt.Println(r) // 65533 } rs := []rune(s) // Conversion to runes decodes UTF-8 (U+FFFD) fmt.Println(rs) // [65533] }
Atas ialah kandungan terperinci Bagaimanakah Go Mengendalikan Urutan Bait Tidak Sah Apabila Menukar kepada Rentetan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!