Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Go Mengendalikan dan Mengesan Bait Tidak Boleh Tukar dalam Rentetan?

Bagaimanakah Go Mengendalikan dan Mengesan Bait Tidak Boleh Tukar dalam Rentetan?

Barbara Streisand
Barbara Streisandasal
2024-12-06 00:20:16336semak imbas

How Does Go Handle and Detect Unconvertible Bytes in Strings?

Pengesanan Bait Tidak Boleh Tukar dalam Rentetan Go

Dalam Go, jujukan bait tertentu tidak boleh ditafsirkan sebagai aksara Unikod yang sah. Mengesan urutan tidak sah ini adalah penting untuk pengendalian rentetan yang lancar. Berikut ialah penjelasan terperinci:

Semakan Kesahan UTF-8:

Seperti yang dinyatakan oleh Tim Cooper, utf8.Valid boleh digunakan untuk memastikan kesahihan UTF-8. Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa rentetan Go boleh mengandungi aksara bukan UTF-8. Ini kerana rentetan pada asasnya ialah kepingan bait dan bait ini mungkin tidak sentiasa mematuhi pengekodan UTF-8.

Gelagat Penyahkodan:

Go hanya melaksanakan UTF -8 penyahkodan dalam dua keadaan tertentu:

  • Meletupkan rentetan menggunakan untuk julat i, r := s, dengan r mewakili titik kod Unicode (jenis rune)
  • Menukar rentetan kepada kepingan rune menggunakan []rune(s)

Dalam kedua-dua kes ini, tidak sah Aksara UTF-8 digantikan dengan titik kod Unicode U FFFD, yang berfungsi sebagai pemegang tempat untuk tidak disokong mesin terbang.

Pengecualian kepada Ranap:

Perhatikan bahawa penukaran ini tidak pernah ranap. Oleh itu, menyemak secara eksplisit kesahihan UTF-8 adalah perlu hanya jika permohonan anda memerlukannya, seperti semasa mengendalikan input yang tidak boleh menerima U FFFD sebagai pengganti.

Contoh:

Kod berikut menunjukkan cara Go mengendalikan UTF-8 yang tidak sah bait:

package main

import "fmt"

func main() {
    a := []byte{0xff}
    s := string(a)
    fmt.Println(s)
    for _, r := range s {
        fmt.Println(r)
    }
    rs := []rune(s)
    fmt.Println(rs)
}

Output:

�
65533
[65533]

Seperti yang anda lihat, jujukan bait yang tidak sah dipaparkan sebagai � apabila rentetan dicetak secara keseluruhan. Apabila berulang, ia mengembalikan titik kod Unicode untuk U FFFD. Dan apabila ditukar kepada sekeping rune, ia mengembalikan satu rune yang mewakili U FFFD.

Oleh itu, walaupun Go tidak ranap apabila menukar UTF-8 bait yang tidak sah kepada rentetan, adalah penting untuk mengetahui perkara yang khusus. tingkah laku dan mengendalikannya dengan sewajarnya dalam aplikasi anda.

Atas ialah kandungan terperinci Bagaimanakah Go Mengendalikan dan Mengesan Bait Tidak Boleh Tukar dalam Rentetan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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