Heim >Backend-Entwicklung >Golang >Warum gibt die String-Indizierung in Go nicht immer das erwartete Zeichen zurück?

Warum gibt die String-Indizierung in Go nicht immer das erwartete Zeichen zurück?

Barbara Streisand
Barbara StreisandOriginal
2024-12-14 16:18:14659Durchsuche

Why Doesn't String Indexing in Go Always Return the Expected Character?

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

  • [Gehen Sie zum Abschnitt „Programmiersprachenspezifikation“ weiter Konvertierungen](https://golang.org/ref/spec#Conversions)
  • [The Go Blog: Strings, Bytes, Runen und Zeichen in Go](https://blog.golang.org/strings -bytes-runes-and-characters-in-go)

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!

Stellungnahme:
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