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') // სტრიქონი იკითხება ბაიტების სლაისში, შემდეგ გარდაქმნილია სტრინგად (UTF-8)
	fmt.Println("თქვენ შეიყვანეთ:", line)
}

სიმბოლოების (უნიკოდის კოდის წერტილების) იტერაცია:

import "fmt"

func iterateString(s string) {
	for i, r := range s { // range იტერებს უნიკოდის კოდის წერტილებს (რუნებს)
		fmt.Printf("პოზიცია: %d, რუნა: %c, კოდის წერტილი: %U\n", i, r, r)
	}
}

ძირითადი მახასიათებლები:

  • Golang-ის სტრიქონები არის შეუცვლელი ბაიტების სია.
  • გამოიყენება UTF-8 კოდირება, რაც უზრუნველყოფს სხვადასხვა ენების სიმბოლოს სწორად წარმოჩენას.
  • range-ის გამოყენებით იტერაცია სტრიქონზე მუშაობს თითოეულ რუნაზე (უნიკოდის კოდის წერტილზე), არა თითოეულ ბაიტზე.

დამატებით:

თუ მონაცემები არ არის UTF-8-ში, შეიძლება საჭირო გახდეს კოდირების გარდაქმნა სტანდარტული ბიბლიოთეკის ან მესამე მხარის ბიბლიოთეკების, მაგალითად golang.org/x/text/encoding, გამოყენებით.