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:
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] }
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!