Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah Go Mengendalikan Urutan Bait Tidak Sah Apabila Menukar kepada Rentetan?

Bagaimanakah Go Mengendalikan Urutan Bait Tidak Sah Apabila Menukar kepada Rentetan?

Linda Hamilton
Lepaskan: 2024-12-06 04:44:17
asal
512 orang telah melayarinya

How Does Go Handle Invalid Byte Sequences When Converting to Strings?

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:

  • Gelung julat: Apabila melelaran pada titik kod Unikod rentetan menggunakan julat gelung, nilai rune yang dikembalikan ialah titik kod Unicode, dengan UTF-8 yang tidak sah digantikan dengan aksara gantian U FFFD (�).
  • Penukaran kepada rune: Menukar rentetan kepada kepingan daripada rune ([]rune) akan menyahkod keseluruhan rentetan, menggantikan UTF-8 yang tidak sah dengan U FFFD.

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]
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan