Назад к вопросам
Junior
165
questionbank

Как прочитать строку, содержащую иероглифы, кириллицу и другие символы?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech 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') // Строка читается в байтовом слайсе, затем преобразуется в string (UTF-8)
	fmt.Println("Вы ввели:", line)
}

Итерирование по символам (рунам):

import "fmt"

func iterateString(s string) {
	for i, r := range s { // Range итерирует по рунам (Unicode кодовым точкам)
		fmt.Printf("Позиция: %d, Руна: %c, Кодовая точка: %U\n", i, r, r)
	}
}

Основные моменты:

  • Golang строки - это неизменяемые последовательности байтов.
  • По умолчанию используется кодировка UTF-8. Это гарантирует корректное представление символов из разных языков.
  • Итерация по строке с помощью range обрабатывает каждую руну (Unicode кодовую точку), а не каждый байт.

Дополнительно:

Если исходные данные не в UTF-8, может потребоваться преобразование кодировки с использованием пакетов из стандартной библиотеки или сторонних библиотек, например golang.org/x/text/encoding.