0Pricing
Go Academy · Leçon

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/utf8 compte, valide et décode les runes.
  • unicode classe 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

  1. Runes et octets
  2. Fonctions du paquet strings
  3. strings.Builder
  4. Unicode et utf8
← Retour à Go Academy