Sobes.tech
Junior

Kaip skaityti eilutę, kurioje yra hieroglifai, kirilica ir kiti simboliai?

sobes.tech AI

Atsakymas iš AI

Golang eilutės pagal numatytuosius nustatymus yra UTF-8 koduotos, leidžiančios be problemų dirbti su simboliais iš įvairių abėcėlių, įskaitant hieroglifus ir kirilicas. Norint skaityti tokias eilutes, pakanka naudoti standartines funkcijas ir paketus.

Skaitant iš failo:

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

func readStringFromFile(filename string) error {
	file, err := os.Open(filename)
	if err != nil {
		return fmt.Errorf("failo atidarymo klaida: %w", err)
	}
	defer file.Close()

	scanner := bufio.NewScanner(file)
	for scanner.Scan() {
		line := scanner.Text() // eilutė jau UTF-8
		fmt.Println(line)
	}

	if err := scanner.Err(); err != nil {
		return fmt.Errorf("failo nuskaitymo klaida: %w", err)
	}
	return nil
}

Skaitant iš standartinio įvesties:

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

func readStringFromStdin() {
	reader := bufio.NewReader(os.Stdin)
	fmt.Print("Įveskite eilutę: ")
	line, _ := reader.ReadString('\n') // eilutė skaitoma baitų sąraše, vėliau paverčiama į string (UTF-8)
	fmt.Println("Jūs įvedėte:", line)
}

Simbolių (Unicode kodų taškų) iteracija:

import "fmt"

func iterateString(s string) {
	for i, r := range s { // range iteruoja per Unicode kodų taškus (rūnas)
		fmt.Printf("Pozicija: %d, Rūna: %c, Kodo taškas: %U\n", i, r, r)
	}
}

Pagrindinės savybės:

  • Golang eilutės yra nepakeičiamos baitų sekos.
  • Naudojamas UTF-8 kodavimas, užtikrinantis teisingą simbolių iš įvairių kalbų atvaizdavimą.
  • Naudojant range, eilutės iteracija apdoroja kiekvieną rūną (Unicode kodų tašką), o ne kiekvieną baitą.

Papildomai:

Jei pradiniai duomenys nėra UTF-8, gali prireikti kodavimo konvertavimo naudojant standartinės bibliotekos arba trečiųjų šalių bibliotekų, pavyzdžiui, golang.org/x/text/encoding.