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
rangeprocesează 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.