Heim > Backend-Entwicklung > Golang > Wie kann ich ungültige UTF-8-Bytesequenzen in Go erkennen?

Wie kann ich ungültige UTF-8-Bytesequenzen in Go erkennen?

DDD
Freigeben: 2024-12-14 22:17:11
Original
287 Leute haben es durchsucht

How Can I Detect Invalid UTF-8 Byte Sequences in Go?

Erkennen ungültiger Bytesequenzen in Go

In Go ist es beim Konvertieren eines Byte-Slice ([]Byte) in eine Zeichenfolge möglich stoßen auf ungültige Bytesequenzen, die nicht in Unicode übersetzt werden können. Dies liegt daran, dass nicht alle Bytesequenzen gültige UTF-8-Zeichen darstellen.

Um solche Vorkommnisse zu erkennen, stehen zwei Ansätze zur Verfügung:

UTF-8-Gültigkeitsprüfung:

Wie Tim Cooper erwähnt, kann die Funktion utf8.Valid verwendet werden, um zu testen, ob ein Byte-Slice gültiges UTF-8 enthält Bytes. Wenn das Ergebnis falsch ist, weist dies auf das Vorhandensein ungültiger Bytesequenzen hin.

Überlegungen zur Zeichenfolgenkonvertierung:

Entgegen allgemeiner Annahmen erlaubt Go die Konvertierung von Nicht-UTF -8-Byte-Slices zu Strings. Es ist jedoch wichtig zu beachten, dass eine Zeichenfolge in Go im Wesentlichen ein schreibgeschütztes Byte-Slice ist und daher Bytes aufnehmen kann, die kein gültiges UTF-8 sind.

Nur ​​in bestimmten Situationen führt Go automatisch UTF-8 aus. 8 Dekodierung:

  • Beim Durchlaufen einer Zeichenfolge mit der Syntax for i, r := range s stellt die Variable r einen Unicode-Codepunkt dar (Rune) und ist immer gültig.
  • Bei der Konvertierung von einer Zeichenfolge in ein Runenstück (d. h. []rune(s)) dekodiert Go die gesamte Zeichenfolge in Runen.

In beiden Fällen werden ungültige UTF-8-Zeichen durch das Ersatzzeichen U FFFD ersetzt. Dieser Ersatz ist möglicherweise nicht in allen Anwendungen akzeptabel, daher wird empfohlen, bei Bedarf eine explizite UTF-8-Validierung durchzuführen.

Beispiel:

Betrachten Sie das folgende Go-Programm:

package main

import (
    "fmt"
    "unicode/utf8"
)

func main() {
    a := []byte{0xff}
    s := string(a)

    // Check UTF-8 validity
    if utf8.Valid(a) {
        fmt.Println("Valid UTF-8")
    } else {
        fmt.Println("Invalid UTF-8")
    }

    // Output string
    fmt.Println(s)
}
Nach dem Login kopieren

Ausgabe:

Invalid UTF-8
�
Nach dem Login kopieren

In diesem Beispiel enthält das Byte-Slice a ein ungültige Bytesequenz, was zu einer „Ungültiges UTF-8“-Meldung führt. Anschließend wird bei der Konvertierung in einen String das ungültige Byte durch das Ersetzungszeichen „�“ dargestellt.

Das obige ist der detaillierte Inhalt vonWie kann ich ungültige UTF-8-Bytesequenzen in Go erkennen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage