Heim > Backend-Entwicklung > Golang > Wie geht Go mit ungültigen Bytesequenzen bei der Konvertierung in Strings um?

Wie geht Go mit ungültigen Bytesequenzen bei der Konvertierung in Strings um?

Linda Hamilton
Freigeben: 2024-12-06 04:44:17
Original
511 Leute haben es durchsucht

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

Validierung ungültiger Bytesequenzen in Go

Beim Versuch, ein Byte-Slice ([]Byte) in einen String in Go umzuwandeln, ist dies der Fall Dies ist von entscheidender Bedeutung, um Szenarien zu bewältigen, in denen die Bytesequenzen nicht in einen gültigen Unicode konvertiert werden können Zeichenfolge.

Lösung:

1. UTF-8-Gültigkeitsprüfung:

Wie von Tim Cooper vorgeschlagen, können Sie die Funktion utf8.Valid verwenden, um festzustellen, ob ein Byte-Slice eine gültige UTF-8-Sequenz ist. Wenn utf8.Valid „false“ zurückgibt, weist dies auf das Vorhandensein ungültiger Bytes hin.

2. Handhabung von Nicht-UTF-8-Bytes:

Entgegen der landläufigen Meinung können Nicht-UTF-8-Bytes immer noch in einem Go-String gespeichert werden. Dies liegt daran, dass Strings in Go im Wesentlichen schreibgeschützte Byte-Slices sind. Sie können ungültige UTF-8-Bytes enthalten, auf die ohne Probleme zugegriffen, gedruckt oder sogar zurück in ein Byte-Slice konvertiert werden kann.

Go führt jedoch in bestimmten Szenarien eine UTF-8-Dekodierung durch:

  • Bereichsschleifen: Beim Durchlaufen der Unicode-Codepunkte einer Zeichenfolge mithilfe einer Bereichsschleife wird der Runenwert zurückgegeben der Unicode-Codepunkt, wobei ungültiges UTF-8 durch das Ersatzzeichen U FFFD (�) ersetzt wurde.
  • Konvertierung in Runen: Konvertieren einer Zeichenfolge in ein Runensegment ([]rune) dekodiert die gesamte Zeichenfolge und ersetzt ungültiges UTF-8 durch U FFFD.

Hinweis: Diese Konvertierungen führen nie zu einer Panik, daher ist es nur dann notwendig, die UTF-8-Gültigkeit aktiv zu prüfen, wenn dies für Ihre Anwendung wesentlich ist (z. B. wenn U FFFD nicht akzeptabel ist und ein Fehler ausgegeben werden sollte).

Beispielcode:

Der folgende Code zeigt, wie Go mit einem Byte-Slice umgeht, das ungültig enthält UTF-8:

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]
}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie geht Go mit ungültigen Bytesequenzen bei der Konvertierung in Strings um?. 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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage