Unicode et utf8
Gérer le texte multioctet
Unicode et utf8 est une leçon Go Academy gratuite sur CoddyKit. Ceci est la leçon 4 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Go Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Go Academy comprend 4 leçons au total.
Pourquoi Unicode est important
Les textes modernes contiennent des accents, des emoji et des écritures non latines. Unicode attribue à chaque caractère un nombre appelé point de code.
Go stocke les chaînes en UTF-8, un encodage de largeur variable de ces points de code.
package main
import "fmt"
func main() {
s := "héllo 世界"
fmt.Println(s)
}Le nombre d’octets par caractère varie
En UTF-8, un caractère utilise de 1 à 4 octets :
- lettres ASCII : 1 octet.
- lettres latines accentuées : généralement 2 octets.
- caractères CJK : généralement 3 octets.
package main
import "fmt"
func main() {
fmt.Println(len("a"))
fmt.Println(len("é"))
fmt.Println(len("世"))
}Le paquet unicode/utf8
Le paquet unicode/utf8 gère cet encodage. utf8.RuneCountInString(s) compte correctement les caractères, contrairement à len.
package main
import (
"fmt"
"unicode/utf8"
)
func main() {
s := "héllo"
fmt.Println(len(s))
fmt.Println(utf8.RuneCountInString(s))
}Validation de l'UTF-8
Utilisez utf8.ValidString(s) pour vérifier qu'une chaîne contient un UTF-8 bien formé avant de la traiter.
package main
import (
"fmt"
"unicode/utf8"
)
func main() {
fmt.Println(utf8.ValidString("héllo"))
fmt.Println(utf8.ValidString(string([]byte{0xff, 0xfe})))
}Décoder un rune
utf8.DecodeRuneInString(s) renvoie le premier rune et le nombre d'octets qu'il a consommés. Cela vous permet de parcourir manuellement une chaîne.
package main
import (
"fmt"
"unicode/utf8"
)
func main() {
r, size := utf8.DecodeRuneInString("世界")
fmt.Println(string(r), size)
}Décodage automatique avec range
Une boucle for range effectue déjà le décodage UTF-8. L'index avance à chaque étape du nombre d'octets correspondant à la taille du rune.
package main
import "fmt"
func main() {
for i, r := range "a世b" {
fmt.Println(i, string(r))
}
}Le paquet unicode
Le paquet unicode classe les runes individuelles. Des fonctions comme unicode.IsLetter et unicode.IsDigit répondent aux questions concernant un caractère.
package main
import (
"fmt"
"unicode"
)
func main() {
fmt.Println(unicode.IsLetter('A'))
fmt.Println(unicode.IsDigit('7'))
fmt.Println(unicode.IsSpace(' '))
}Modifier la casse des runes
unicode.ToUpper et unicode.ToLower agissent sur des runes individuelles, notamment sur de nombreuses lettres non ASCII.
package main
import (
"fmt"
"unicode"
)
func main() {
fmt.Println(string(unicode.ToUpper('a')))
fmt.Println(string(unicode.ToLower('Z')))
}Compter les lettres en toute sécurité
Combinez les paquets pour compter uniquement les lettres d'un texte mixte, en traitant correctement chaque rune.
package main
import (
"fmt"
"unicode"
)
func main() {
count := 0
for _, r := range "a1 b2 世!" {
if unicode.IsLetter(r) {
count++
}
}
fmt.Println(count)
}Inverser par rune
Pour inverser du texte sans risque, vous devez inverser les runes, et non les octets, sinon les caractères multioctets se disloquent.
package main
import "fmt"
func main() {
runes := []rune("a世b")
for i, j := 0, len(runes)-1; i < j; i, j = i+1, j-1 {
runes[i], runes[j] = runes[j], runes[i]
}
fmt.Println(string(runes))
}Mettre tout en pratique
Un outil de synthèse rapide : indiquez la longueur en octets, le nombre de runes et si le texte est valide en UTF-8.
package main
import (
"fmt"
"unicode/utf8"
)
func main() {
s := "Go 世界!"
fmt.Println("bytes:", len(s))
fmt.Println("runes:", utf8.RuneCountInString(s))
fmt.Println("valid:", utf8.ValidString(s))
}Vérification rapide
Choisissez la bonne façon de compter les caractères.
Récapitulatif : Unicode et utf8
Vous savez maintenant manipuler les textes multioctets avec assurance :
- Les chaînes Go sont en UTF-8 ; les caractères utilisent de 1 à 4 octets.
unicode/utf8compte, valide et décode les runes.unicodeclasse les runes individuelles et en modifie la casse.
package main
import (
"fmt"
"unicode/utf8"
)
func main() {
s := "café 語"
fmt.Println(utf8.RuneCountInString(s), "runes")
}Questions Fréquemment Posées
La leçon « Unicode et utf8 » est-elle gratuite ?
Oui — le texte complet de « Unicode et utf8 » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Go Academy, passe à CoddyKit PRO. Le cours Go Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Unicode et utf8 » ?
Gérer le texte multioctet Tu pratiques Go Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer Go Academy ?
Aucune expérience préalable n'est requise. Go Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 4 sur 4.
Combien de temps prend la leçon « Unicode et utf8 » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon Go Academy ?
Oui. Chaque leçon Go Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Runes et octets
- Fonctions du paquet strings
- strings.Builder
- Unicode et utf8