Maison >développement back-end >Golang >Pourquoi l'indexation de chaînes dans Go ne renvoie-t-elle pas toujours le caractère attendu ?

Pourquoi l'indexation de chaînes dans Go ne renvoie-t-elle pas toujours le caractère attendu ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-14 16:18:14659parcourir

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

Indexation des caractères dans les chaînes Golang

Pour récupérer les caractères d'une chaîne, vous utilisez des opérations d'indexation. Cependant, vous pouvez rencontrer des cas où la valeur indexée ne correspond pas au caractère attendu. Par exemple, dans le code ci-dessous :

package main

import "fmt"

func main() {
    fmt.Print("HELLO"[1])
}

La sortie est 69 au lieu de la lettre "E".

Comprendre l'encodage de chaînes Golang

Golang utilise le codage UTF-8 pour les chaînes littérales. Les caractères ASCII, y compris la lettre « E », occupent un seul octet. Cependant, les caractères Unicode plus grands peuvent être représentés par plusieurs octets.

Utiliser des runes pour l'indexation des caractères

Pour indexer correctement les caractères, utilisez des runes : des entiers représentant des points de code Unicode. Une rune est le type sous-jacent des caractères en UTF-8. Vous pouvez convertir un octet en rune à l'aide de la fonction rune().

Conversion d'octets en caractères

Pour convertir un octet en son caractère correspondant, vous pouvez utiliser le Fonction string() :

fmt.Println(string("Hello"[1])) // ASCII only

Cette approche fonctionne bien pour l'ASCII caractères.

Conversion de runes en caractères

Pour les caractères Unicode, vous pouvez convertir une rune en caractère à l'aide de la tranche []rune() :

fmt.Println(string([]rune("Hello, 世界")[1])) // UTF-8

Exemple avec des caractères Unicode

Considérez ce qui suit exemple :

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

Cela affichera "界", qui est le point de code Unicode pour le caractère chinois "monde".

Ressources supplémentaires

  • [Aller à la section Spécification du langage de programmation sur Conversions](https://golang.org/ref/spec#Conversions)
  • [Le blog Go : chaînes, octets, runes et caractères dans Go](https://blog.golang.org/strings -octets-runes-et-personnages-en-go)

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn