Без дальнейшего контекста я бы сказал, что максимальное количество байтов для символа в UTF-8 составляет
ответ: 6 байт
Автор принятого ответа правильно указал на это как на «исходную спецификацию». Это действовало до RFC-2279 1 . Как отметил Дж. Коко в комментариях ниже, это изменилось в 2003 году с появлением RFC-3629 2 , который ограничивает UTF-8 кодированием для 21 бита, что может быть обработано схемой кодирования с использованием четырех байтов.
ответ, если покрывает весь юникод: 4 байта
Но в Java <= v7 они говорят о 3-байтовом максимуме для представления Unicode с UTF-8? Это потому, что исходная спецификация Unicode определяла только базовую многоязычную плоскость ( BMP ), то есть это более старая версия unicode или подмножество современного unicode. Так
ответ, если представляет только исходный юникод, BMP: 3 байта
Но ОП говорит о том, чтобы пойти другим путем. Не из символов в байты UTF-8, а из байтов UTF-8 в «Строку» байтового представления. Возможно, автор принятого ответа получил это из контекста вопроса, но это не обязательно очевидно, поэтому может сбить с толку случайного читателя этого вопроса.
Переходя от UTF-8 к собственной кодировке, мы должны посмотреть, как реализована «строка». Некоторые языки, такие как Python> = 3, будут представлять каждый символ целыми кодовыми точками, что позволяет использовать 4 байта на символ = 32 бита, чтобы покрыть 21, который нам нужен для Unicode, с некоторыми потерями. Почему не совсем 21 бит? Потому что все происходит быстрее, когда они выровнены по байтам. Некоторые языки, такие как Python <= 2 и Java, представляют символы с использованием кодировки UTF-16, что означает, что они должны использовать суррогатные пары для представления расширенного юникода (не BMP). В любом случае это все еще максимум 4 байта.
ответьте, если идете UTF-8 -> собственная кодировка: 4 байта
Итак, окончательный вывод, 4 - наиболее распространенный правильный ответ, так что мы все правильно поняли. Но пробег может отличаться.