Выбор ответа Senior Строки, байты и руны обновлено
range по невалидному UTF-8
Вопрос
Что даёт range по строке, когда встречает байт, который не является корректным UTF-8?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Руну U+FFFD шириной 1 байт и идёт дальше. Строка может содержать любые байты.
Варианты ответа
- panic: invalid UTF-8 на этом байте
- Пропускает байт молча и идёт к следующей руне
- Останавливает цикл, как break
- Руну U+FFFD шириной 1 байт и идёт дальшеправильный ответ
Разбор
Строка может содержать любые байты. Встретив некорректную последовательность, range возвращает U+FFFD и сдвигается на 1 байт, так что цикл продолжается. Паники нет, байт не пропадает бесследно, цикл не обрывается. Проверить строку заранее: utf8.ValidString.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Ещё по теме «Строки, байты и руны»
- Байты и символы в строке Go
- Разворот строки с кириллицей на Go
- Сжатие RLE для строк UTF-8 на Go
- Палиндром с кириллицей и знаками на Go
- Перенос текста по ширине в символах на Go
- Что выведет Go: len и range по строке с кириллицей
- Что выведет Go: руны, байты и преобразования
- Что выведет Go: сравнение и срезы строк