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.