Sobes.tech
Junior

Wie liest man eine Zeile, die Hieroglyphen, kyrillische Schriftzeichen und andere Symbole enthält?

sobes.tech KI

Antwort von AI

In Golang werden Strings standardmäßig in UTF-8 dargestellt, was die problemlose Arbeit mit Zeichen aus verschiedenen Alphabeten ermöglicht, einschließlich Hieroglyphen und Kyrillisch. Um solche Strings zu lesen, genügt es, die Standardfunktionen und -pakete zu verwenden.

Lesen aus einer Datei:

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

func readStringFromFile(filename string) error {
	file, err := os.Open(filename)
	if err != nil {
		return fmt.Errorf("Fehler beim Öffnen der Datei: %w", err)
	}
	defer file.Close()

	scanner := bufio.NewScanner(file)
	for scanner.Scan() {
		line := scanner.Text() // Die Zeile ist bereits in UTF-8
		fmt.Println(line)
	}

	if err := scanner.Err(); err != nil {
		return fmt.Errorf("Fehler beim Scannen der Datei: %w", err)
	}
	return nil
}

Lesen von der Standardeingabe:

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

func readStringFromStdin() {
	reader := bufio.NewReader(os.Stdin)
	fmt.Print("Geben Sie eine Zeile ein: ")
	line, _ := reader.ReadString('\n') // Die Zeile wird in einem Byte-Slice gelesen und dann in einen String (UTF-8) umgewandelt
	fmt.Println("Sie haben eingegeben:", line)
}

Iterieren über Zeichen (Runen):

import "fmt"

func iterateString(s string) {
	for i, r := range s { // Range iteriert über Runen (Unicode-Codepunkte)
		fmt.Printf("Position: %d, Rune: %c, Unicode-Codepunkt: %U\n", i, r, r)
	}
}

Wichtige Punkte:

  • Golang-Strings sind unveränderliche Byte-Sequenzen.
  • Standardmäßig wird UTF-8 verwendet. Dies garantiert eine korrekte Darstellung von Zeichen aus verschiedenen Sprachen.
  • Das Iterieren über eine String mit range verarbeitet jede Rune (Unicode-Codepunkt), nicht jedes Byte.

Zusätzlich:

Wenn die Quelldaten nicht in UTF-8 vorliegen, kann eine Konvertierung der Kodierung notwendig sein, unter Verwendung von Paketen aus der Standardbibliothek oder externen Bibliotheken wie golang.org/x/text/encoding.