Sobes.tech
Junior

Cum se citește o linie care conține hieroglife, chirilice și alte simboluri?

sobes.tech AI

Răspuns de la AI

În Golang, șirurile de caractere sunt reprezentate implicit în UTF-8, ceea ce permite lucrul fără probleme cu simboluri din diferite alfabete, inclusiv hieroglife și chirilic. Pentru citirea acestor șiruri, este suficient să folosiți funcții și pachete standard.

Citirea din fișier:

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

func readStringFromFile(filename string) error {
	file, err := os.Open(filename)
	if err != nil {
		return fmt.Errorf("eroare la deschiderea fișierului: %w", err)
	}
	defer file.Close()

	scanner := bufio.NewScanner(file)
	for scanner.Scan() {
		line := scanner.Text() // Linia este deja în UTF-8
		fmt.Println(line)
	}

	if err := scanner.Err(); err != nil {
		return fmt.Errorf("eroare la scanarea fișierului: %w", err)
	}
	return nil
}

Citirea din intrarea standard:

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

func readStringFromStdin() {
	reader := bufio.NewReader(os.Stdin)
	fmt.Print("Introduceți o linie: ")
	line, _ := reader.ReadString('\n') // Linia este citită într-un slice de bytes și apoi convertită în string (UTF-8)
	fmt.Println("Ați introdus:", line)
}

Iterarea peste caractere (rune):

import "fmt"

func iterateString(s string) {
	for i, r := range s { // Range iterează peste rune-uri (puncte de cod Unicode)
		fmt.Printf("Poziție: %d, Runa: %c, Punct de cod: %U\n", i, r, r)
	}
}

Puncte importante:

  • În Golang, șirurile sunt secvențe imuabile de octeți.
  • În mod implicit, se folosește codificarea UTF-8. Aceasta asigură o reprezentare corectă a caracterelor din diferite limbi.
  • Iterarea peste un șir cu range procesează fiecare rune (punct de cod Unicode), nu fiecare octet.

În plus:

Dacă datele sursă nu sunt în UTF-8, poate fi necesară conversia codificării folosind pachete din biblioteca standard sau biblioteci externe, precum golang.org/x/text/encoding.