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
Freigeben: 2024-12-14 16:18:14
Original
657 Leute haben es durchsucht

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

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

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

Beispiel mit Unicode-Zeichen

Bedenken Sie Folgendes Beispiel:

fmt.Println(string([]rune("Hello, 世界")[8])) // UTF-8
Nach dem Login kopieren

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!

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