Sobes.tech
Junior

Comment lire une ligne contenant des hiéroglyphes, cyrilliques et d'autres symboles?

sobes.tech IA

Réponse de l'IA

Dans Golang, les chaînes sont par défaut représentées en UTF-8, ce qui permet de travailler facilement avec des caractères issus de différents alphabets, y compris les hiéroglyphes et le cyrillique. Pour lire ces chaînes, il suffit d'utiliser les fonctions et packages standard.

Lecture depuis un fichier :

import (
	"bufio"
	"fmt"
	"os"
)

func readStringFromFile(filename string) error {
	file, err := os.Open(filename)
	if err != nil {
		return fmt.Errorf("erreur lors de l'ouverture du fichier : %w", err)
	}
	defer file.Close()

	scanner := bufio.NewScanner(file)
	for scanner.Scan() {
		line := scanner.Text() // La ligne est déjà en UTF-8
		fmt.Println(line)
	}

	if err := scanner.Err(); err != nil {
		return fmt.Errorf("erreur lors de la lecture du fichier : %w", err)
	}
	return nil
}

Lecture depuis l'entrée standard :

import (
	"bufio"
	"fmt"
	"os"
)

func readStringFromStdin() {
	reader := bufio.NewReader(os.Stdin)
	fmt.Print("Entrez une chaîne : ")
	line, _ := reader.ReadString('\n') // La chaîne est lue dans un slice de bytes, puis convertie en string (UTF-8)
	fmt.Println("Vous avez saisi :", line)
}

Itération sur les caractères (runes) :

import "fmt"

func iterateString(s string) {
	for i, r := range s { // Range itère sur les runes (points de code Unicode)
		fmt.Printf("Position : %d, Rune : %c, Point de code : %U\n", i, r, r)
	}
}

Points importants :

  • Les chaînes en Golang sont des séquences immuables d'octets.
  • Par défaut, l'encodage utilisé est UTF-8. Cela garantit une représentation correcte des caractères de différentes langues.
  • L'itération sur une chaîne avec range traite chaque rune (point de code Unicode), et non chaque octet.

En supplément :

Si les données sources ne sont pas en UTF-8, il peut être nécessaire de convertir l'encodage en utilisant des packages de la bibliothèque standard ou des bibliothèques externes, comme golang.org/x/text/encoding.