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