Sobes.tech
Junior

Kuidas lugeda rida, mis sisaldab hieroglüüfe, kirillitsa ja teisi sümboleid?

sobes.tech AI

Vastus AI-lt

Golangistringid on vaikimisi esitatud UTF-8 kodeeringus, mis võimaldab probleemideta töötada erinevate tähestike sümbolitega, sealhulgas hieroglüüfide ja kirillitsaga. Selliste stringide lugemiseks piisab kasutada standardseid funktsioone ja pakette.

Failist lugemine:

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

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

	scanner := bufio.NewScanner(file)
	for scanner.Scan() {
		line := scanner.Text() // rida on juba UTF-8
		fmt.Println(line)
	}

	if err := scanner.Err(); err != nil {
		return fmt.Errorf("faili skaneerimise viga: %w", err)
	}
	return nil
}

Standardsisest sisendist lugemine:

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

func readStringFromStdin() {
	reader := bufio.NewReader(os.Stdin)
	fmt.Print("Sisestage rida: ")
	line, _ := reader.ReadString('\n') // rida loetakse baitide järjendina, seejärel teisendatakse stringiks (UTF-8)
	fmt.Println("Te sisestasite:", line)
}

Sümbolite (Unicode koodipunktide) iteratsioon:

import "fmt"

func iterateString(s string) {
	for i, r := range s { // range iteratsioon läbib iga Unicode koodipunkti (rūnu)
		fmt.Printf("Positsioon: %d, Rūna: %c, Koodipunkt: %U\n", i, r, r)
	}
}

Peamised punktid:

  • Golang'i stringid on muutumatud baitide järjestused.
  • Kasutatakse UTF-8 kodeeringut, mis tagab erinevate keelte sümbolite korrektse esitluse.
  • range-i kasutamine stringi iteratsioonil töötleb iga rūnu (Unicode koodipunkti), mitte iga bait.

Täiendavalt:

Kui algandmed ei ole UTF-8-s, võib olla vajalik kodeeringu teisendamine, kasutades standardraamatukogu või kolmanda osapoole raamatukogusid, näiteks golang.org/x/text/encoding.