Sobes.tech
Junior

Hoe lees je een regel die hiërogliefen, Cyrillisch en andere symbolen bevat?

sobes.tech AI

Antwoord van AI

In Golang worden strings standaard weergegeven in UTF-8, wat het probleemloos werken met tekens uit verschillende alfabetten mogelijk maakt, inclusief hiërogliefen en Cyrillisch. Om dergelijke strings te lezen, volstaat het om gebruik te maken van standaardfuncties en -pakketten.

Lezen uit een bestand:

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

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

	scanner := bufio.NewScanner(file)
	for scanner.Scan() {
		line := scanner.Text() // De regel is al in UTF-8
		fmt.Println(line)
	}

	if err := scanner.Err(); err != nil {
		return fmt.Errorf("fout bij scannen bestand: %w", err)
	}
	return nil
}

Lezen van standaardinvoer:

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

func readStringFromStdin() {
	reader := bufio.NewReader(os.Stdin)
	fmt.Print("Voer een string in: ")
	line, _ := reader.ReadString('\n') // De string wordt gelezen in een byte slice en vervolgens geconverteerd naar string (UTF-8)
	fmt.Println("Je hebt ingevoerd:", line)
}

Iteratie over tekens (runes):

import "fmt"

func iterateString(s string) {
	for i, r := range s { // Range itereert over runes (Unicode codepunten)
		fmt.Printf("Positie: %d, Runes: %c, Unicode punt: %U\n", i, r, r)
	}
}

Belangrijke punten:

  • Golang strings zijn onveranderlijke byte-sequenties.
  • Standaard wordt UTF-8 gebruikt. Dit garandeert een correcte weergave van tekens uit verschillende talen.
  • Iteratie over een string met range verwerkt elke rune (Unicode codepunt), niet elke byte.

Daarnaast:

Als de brongegevens niet in UTF-8 zijn, kan het nodig zijn om de codering te converteren met behulp van pakketten uit de standaardbibliotheek of externe bibliotheken, zoals golang.org/x/text/encoding.