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:
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) }
Ausgabe:
Invalid UTF-8 �
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!