Junior
Ako prečítať riadok obsahujúci hieroglyfy, cyriliku a ďalšie znaky?
sobes.tech AI
Odpoveď od AI
V Golang-u sú reťazce predvolene reprezentované v UTF-8, čo umožňuje bezproblémovú prácu s znakmi z rôznych abecied, vrátane hieroglyfov a cyrilice. Na čítanie takýchto reťazcov stačí použiť štandardné funkcie a balíky.
Čítanie zo súboru:
import (
"bufio"
"fmt"
"os"
)
func readStringFromFile(filename string) error {
file, err := os.Open(filename)
if err != nil {
return fmt.Errorf("chyba pri otváraní súboru: %w", err)
}
defer file.Close()
scanner := bufio.NewScanner(file)
for scanner.Scan() {
line := scanner.Text() // Riadok je už v UTF-8
fmt.Println(line)
}
if err := scanner.Err(); err != nil {
return fmt.Errorf("chyba pri skenovaní súboru: %w", err)
}
return nil
}
Čítanie zo štandardného vstupu:
import (
"bufio"
"fmt"
"os"
)
func readStringFromStdin() {
reader := bufio.NewReader(os.Stdin)
fmt.Print("Zadajte reťazec: ")
line, _ := reader.ReadString('\n') // Reťazec sa načítava v slice bajtov a následne konvertuje na string (UTF-8)
fmt.Println("Zadali ste:", line)
}
Iterácia cez znaky (rune):
import "fmt"
func iterateString(s string) {
for i, r := range s { // Range iteruje cez rune (Unicode kódové body)
fmt.Printf("Pozícia: %d, Runa: %c, Kódový bod: %U\n", i, r, r)
}
}
Hlavné body:
- V Golang sú reťazce nemenné sekvencie bajtov.
- Predvolene sa používa UTF-8 kódovanie. To zabezpečuje správne zobrazenie znakov z rôznych jazykov.
- Iterácia cez reťazec pomocou
rangespracováva každú runu (Unicode kódový bod), nie každý bajt.
Dodatočne:
Ak zdrojové dáta nie sú v UTF-8, môže byť potrebné konvertovať kódovanie pomocou balíkov zo štandardnej knižnice alebo externých knižníc, napríklad golang.org/x/text/encoding.