Выбор ответа Senior Строки, байты и руны обновлено

range по невалидному UTF-8

Вопрос

Что даёт range по строке, когда встречает байт, который не является корректным UTF-8?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Руну U+FFFD шириной 1 байт и идёт дальше. Строка может содержать любые байты.

Варианты ответа

  1. panic: invalid UTF-8 на этом байте
  2. Пропускает байт молча и идёт к следующей руне
  3. Останавливает цикл, как break
  4. Руну U+FFFD шириной 1 байт и идёт дальшеправильный ответ

Разбор

Строка может содержать любые байты. Встретив некорректную последовательность, range возвращает U+FFFD и сдвигается на 1 байт, так что цикл продолжается. Паники нет, байт не пропадает бесследно, цикл не обрывается. Проверить строку заранее: utf8.ValidString.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.