Sobes.tech
Junior

Kā lasīt rindu, kas satur hieroglifus, kirilicu un citus simbolus?

sobes.tech AI

Atbilde no AI

Golang rindas pēc noklusējuma pārstāv UTF-8 kodējums, kas ļauj bez problēmām strādāt ar simboliem no dažādām alfabētām, ieskaitot hieroglifus un kirilicu. Lai lasītu šādas rindas, pietiek izmantot standarta funkcijas un pakotnes.

Lasīšana no faila:

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

func readStringFromFile(filename string) error {
	file, err := os.Open(filename)
	if err != nil {
		return fmt.Errorf("faila atvēršanas kļūda: %w", err)
	}
	defer file.Close()

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

	if err := scanner.Err(); err != nil {
		return fmt.Errorf("faila skenēšanas kļūda: %w", err)
	}
	return nil
}

Lasīšana no standarta ievades:

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

func readStringFromStdin() {
	reader := bufio.NewReader(os.Stdin)
	fmt.Print("Ievadiet rindu: ")
	line, _ := reader.ReadString('\n') // rinda tiek nolasīta baitu sēkā, pēc tam pārvērsta par stringu (UTF-8)
	fmt.Println("Jūs ievadījāt:", line)
}

Simbolu (Unicode kodu punktu) iterācija:

import "fmt"

func iterateString(s string) {
	for i, r := range s { // range iterē pa rūnām (Unicode kodu punktiem)
		fmt.Printf("Pozīcija: %d, Rūna: %c, Koda punkts: %U\n", i, r, r)
	}
}

Galvenie punkti:

  • Golang rindas ir nemainīgas baitu secības.
  • Tiek izmantots UTF-8 kodējums, kas nodrošina pareizu simbolu attēlojumu no dažādām valodām.
  • Izmantojot range, rindas iterācija apstrādā katru rūnu (Unicode kodu punktu), nevis katru baitu.

Papildus:

Ja sākotnējie dati nav UTF-8, var būt nepieciešama kodējuma pārveidošana, izmantojot standarta bibliotēku vai trešo pušu bibliotēkas, piemēram, golang.org/x/text/encoding.