Heim >Backend-Entwicklung >Golang >Warum gibt die String-Indizierung in Go nicht immer das erwartete Zeichen zurück?
Indizieren von Zeichen in Golang-Strings
Um Zeichen aus einem String abzurufen, verwenden Sie Indizierungsvorgänge. Es kann jedoch vorkommen, dass der indizierte Wert nicht mit dem erwarteten Zeichen übereinstimmt. Zum Beispiel im folgenden Code:
package main import "fmt" func main() { fmt.Print("HELLO"[1]) }
Die Ausgabe ist 69 anstelle des Buchstabens „E.“
Grundlegendes zur Golang-String-Kodierung
Golang verwendet UTF-8-Codierung für String-Literale. ASCII-Zeichen, einschließlich des Buchstabens „E“, belegen ein einzelnes Byte. Größere Unicode-Zeichen können jedoch durch mehrere Bytes dargestellt werden.
Runen zur Zeichenindizierung verwenden
Um Zeichen korrekt zu indizieren, verwenden Sie Runen: Ganzzahlen, die Unicode-Codepunkte darstellen. Eine Rune ist der zugrunde liegende Typ für Zeichen in UTF-8. Sie können ein Byte mit der Funktion rune() in eine Rune umwandeln.
Bytes in Zeichen umwandeln
Um ein Byte in das entsprechende Zeichen umzuwandeln, können Sie die verwenden string()-Funktion:
fmt.Println(string("Hello"[1])) // ASCII only
Dieser Ansatz funktioniert gut für ASCII Zeichen.
Runen in Zeichen konvertieren
Für Unicode-Zeichen können Sie eine Rune mit dem Slice []rune() in ein Zeichen umwandeln:
fmt.Println(string([]rune("Hello, 世界")[1])) // UTF-8
Beispiel mit Unicode-Zeichen
Bedenken Sie Folgendes Beispiel:
fmt.Println(string([]rune("Hello, 世界")[8])) // UTF-8
Dadurch wird „界“ gedruckt, was der Unicode-Codepunkt für das chinesische Schriftzeichen „world“ ist.
Zusätzliche Ressourcen
Das obige ist der detaillierte Inhalt vonWarum gibt die String-Indizierung in Go nicht immer das erwartete Zeichen zurück?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!