> Что такое кодировки текста, например UTF-8 и UTF-16 (Go)

Уровень: junior · Роль: backend · Категория: Технические вопросы

Компании: Orion_soft

Стек: Go

> Пример ответа

Кодировка текста - это правило, которое сопоставляет символы (буквы, цифры, знаки) с последовательностями байтов. В Go строки (string) являются неизменяемыми последовательностями байтов, но по умолчанию они интерпретируются как UTF-8. Это важно, потому что Go спроектирован с поддержкой UTF-8 на уровне языка: например, итерация по строке через for range автоматически декодирует руны (rune - это Unicode-кодовая точка, аналог int32).

UTF-8 - это кодировка переменной длины: символы ASCII (0–127) занимают 1 байт, а остальные символы Unicode - от 2 до 4 байтов. Это эффективно для текстов на латинице и популярно в вебе. В Go строка "Привет" в памяти будет занимать 12 байт (каждая кириллическая буква - 2 байта).

UTF-16 - тоже переменной длины, но использует 2 или 4 байта на символ. Чаще встречается в Windows и Java. В Go нет встроенного типа для UTF-16, но его можно обрабатывать через пакет unicode/utf16, например, при работе с API Windows.

Пример на Go:

GO
package main
import (
"fmt"
"unicode/utf8"
)
func main() {
s := "Привет, мир!"
fmt.Println("len (bytes):", len(s)) // 21 байт (каждая кириллица - 2 байта)
fmt.Println("rune count:", utf8.RuneCountInString(s)) // 12 рун
for i, r := range s {
fmt.Printf("%d: %c\n", i, r) // i - смещение в байтах
}
}

Вывод покажет, что индексы идут не подряд: для кириллицы шаг равен 2.

Практический совет: В Go всегда работайте с UTF-8, если нет явной необходимости в другой кодировке. Для конвертации используйте golang.org/x/text/encoding или стандартный пакет unicode/utf16.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью