Sobes.tech
Назад к вопросам
Senior
5

Что произойдёт со строкой при реверсе по байтам и по рунам? С какими проблемами можно столкнуться?

Компании, где спрашивали
Алабуга

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

sobes.tech AI

При реверсе строки по байтам в Go меняется порядок байтов, но если строка содержит много байтовые UTF-8 символы (руны), то такие символы могут быть повреждены, так как байты символа окажутся в неправильном порядке. В результате строка станет некорректной и может вызвать ошибки при выводе или обработке.

При реверсе по рунам (Unicode code points) меняется порядок символов, а не байтов, что сохраняет корректность UTF-8 кодировки. Это правильный способ реверса для строк с много байтовыми символами.

Проблемы:

  • Реверс по байтам ломает много байтовые символы.
  • Нужно учитывать, что руна — это не всегда один визуальный символ (например, эмодзи с модификаторами), поэтому простой реверс рун может изменить визуальное представление.

Пример реверса по рунам в Go:

func reverseRunes(s string) string {
    runes := []rune(s)
    for i, j := 0, len(runes)-1; i < j; i, j = i+1, j-1 {
        runes[i], runes[j] = runes[j], runes[i]
    }
    return string(runes)
}