Sobes.tech
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 range spracová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.