Sobes.tech
Junior

Kako pročitati red koji sadrži hijeroglife, ćirilicu i druge simbole?

sobes.tech АИ

Одговор од АИ

U Golang-u, stringovi su podrazumevano predstavljeni u UTF-8, što omogućava nesmetan rad sa simbolima iz različitih alfabeta, uključujući hijeroglife i ćirilicu. Za čitanje takvih stringova dovoljno je koristiti standardne funkcije i pakete.

Čitanje iz fajla:

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

func readStringFromFile(filename string) error {
	file, err := os.Open(filename)
	if err != nil {
		return fmt.Errorf("greška pri otvaranju fajla: %w", err)
	}
	defer file.Close()

	scanner := bufio.NewScanner(file)
	for scanner.Scan() {
		line := scanner.Text() // Linija je već u UTF-8
		fmt.Println(line)
	}

	if err := scanner.Err(); err != nil {
		return fmt.Errorf("greška pri skeniranju fajla: %w", err)
	}
	return nil
}

Čitanje sa standardnog ulaza:

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

func readStringFromStdin() {
	reader := bufio.NewReader(os.Stdin)
	fmt.Print("Unesite niz: ")
	line, _ := reader.ReadString('\n') // Niz se čita u slice bajtova, zatim se konvertuje u string (UTF-8)
	fmt.Println("Uneli ste:", line)
}

Iteriranje kroz karaktere (rune):

import "fmt"

func iterateString(s string) {
	for i, r := range s { // Range iterira po rune-ovima (Unicode kod tačkama)
		fmt.Printf("Pozicija: %d, Runa: %c, Kodna tačka: %U\n", i, r, r)
	}
}

Glavne tačke:

  • Golang stringovi su nepromenljive sekvence bajtova.
  • Podrazumevano se koristi UTF-8 kodiranje. To garantuje ispravno predstavljanje karaktera iz različitih jezika.
  • Iteracija kroz string pomoću range obrađuje svaku runu (Unicode kod tačku), a ne svaki bajt.

Dodatno:

Ako izvori podataka nisu u UTF-8, može biti potrebno konvertovati kodiranje koristeći pakete iz standardne biblioteke ili spoljne biblioteke, poput golang.org/x/text/encoding.