Sobes.tech
Junior

Πώς διαβάζετε μια γραμμή που περιέχει ιερογλυφικά, κυριλλικά και άλλα σύμβολα;

sobes.tech AI

Απάντηση από AI

Στο Golang, οι συμβολοσειρές αντιπροσωπεύονται προεπιλεγμένα σε UTF-8, κάτι που επιτρέπει την εύκολη εργασία με χαρακτήρες από διάφορα αλφάβητα, συμπεριλαμβανομένων των ιερογλυφικών και του κυριλλικού. Για την ανάγνωση τέτοιων συμβολοσειρών, αρκεί η χρήση των τυπικών συναρτήσεων και πακέτων.

Ανάγνωση από αρχείο:

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

func readStringFromFile(filename string) error {
	file, err := os.Open(filename)
	if err != nil {
		return fmt.Errorf("σφάλμα κατά το άνοιγμα του αρχείου: %w", err)
	}
	defer file.Close()

	scanner := bufio.NewScanner(file)
	for scanner.Scan() {
		line := scanner.Text() // Η γραμμή είναι ήδη σε UTF-8
		fmt.Println(line)
	}

	if err := scanner.Err(); err != nil {
		return fmt.Errorf("σφάλμα κατά την σάρωση του αρχείου: %w", err)
	}
	return nil
}

Ανάγνωση από την τυπική είσοδο:

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

func readStringFromStdin() {
	reader := bufio.NewReader(os.Stdin)
	fmt.Print("Εισάγετε μια συμβολοσειρά: ")
	line, _ := reader.ReadString('\n') // Η συμβολοσειρά διαβάζεται σε ένα slice byte και στη συνέχεια μετατρέπεται σε string (UTF-8)
	fmt.Println("Εσείς εισάγατε:", line)
}

Επαναληπτική επεξεργασία χαρακτήρων (runes):

import "fmt"

func iterateString(s string) {
	for i, r := range s { // Το range επεξεργάζεται κάθε rune (Unicode code point)
		fmt.Printf("Θέση: %d, Runa: %c, Κωδικός σημείου: %U\n", i, r, r)
	}
}

Βασικά σημεία:

  • Οι συμβολοσειρές στο Golang είναι αμετάβλητες ακολουθίες byte.
  • Η προεπιλεγμένη κωδικοποίηση είναι η UTF-8. Αυτό διασφαλίζει την σωστή αναπαράσταση χαρακτήρων από διαφορετικές γλώσσες.
  • Η επανάληψη σε μια συμβολοσειρά με το range επεξεργάζεται κάθε rune (Unicode code point), όχι κάθε byte.

Επιπλέον:

Εάν τα αρχικά δεδομένα δεν είναι σε UTF-8, μπορεί να χρειάζεται η μετατροπή κωδικοποίησης με τη χρήση πακέτων από τη βιβλιοθήκη standard ή εξωτερικές βιβλιοθήκες, όπως το golang.org/x/text/encoding.