Назад к вопросам
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.