Без дальнейшего контекста, я бы сказал, что максимальное количество байтов для символа в UTF-8 является
Ответ: 6 байт
Автор принятого ответа правильно указал на это как " оригинальная спецификация ", но я думаю, что это вводит в заблуждение читателя, потому что, насколько я знаю, это все еще текущая и правильная спецификация, за wikipedia и за a Google book on UTF-8 in Java.
RFC, ссылки в принятых государствами ответов, что только четыре байта имеют отношение к UTF-16 кодировке, так что это правильно, только если мы добавим контекст
ответ, если перевод только символы из UTF-16 в UTF- 8: 4 байта
Теперь все символы, которые могут быть представлены UTF-16 полезными? Согласно wikipedia again, unicode может представлять до кодовых точек x10FFFF. Таким образом, включая 0, это означает, что мы можем сделать это с помощью этих байтов: F FF FF, то есть два с половиной байта или 20 бит. Оглядываясь на спецификацию UTF-8, мы видим, что мы можем представлять 20 бит с четырьмя байтами с кодировкой UTF-8. Так
ответа, если покрытие всего Юникода: 4 байта
Но, в Java <= v7, они говорят о максимуме в 3 байт для представления Юникода с UTF-8? Это потому, что исходная спецификация Юникода определяла только базовую многоязычную плоскость (BMP), то есть это более ранняя версия юникода или подмножество современного юникода. Так
ответ, если представляющий только оригинальные юникода, ВМР: 3 байта
Но, как О.П. переговоры о переходе в другую сторону. Не от символов до байтов UTF-8, а от байтов UTF-8 до «String» представления байтов. Возможно, автор принятого ответа получил это из контекста вопроса, но это не обязательно очевидно, поэтому может запутать случайного читателя этого вопроса.
Переходя от UTF-8 к собственной кодировке, мы должны посмотреть, как реализована «String». Некоторые языки, такие как Python> = 3, будут представлять каждый символ с целыми кодовыми точками, что позволяет использовать 4 байта на символ = 32 бит, чтобы покрыть 20, которые нам нужны для unicode, с некоторыми отходами. Почему не ровно 20 бит? Потому что вещи быстрее, когда они выровнены по байтам. Некоторые языки, такие как Python < = 2 и Java, представляют символы с использованием кодировки UTF-16, что означает, что они должны использовать суррогатные пары для представления расширенного unicode (а не BMP). В любом случае это максимум 4 байта.
ответ, если собираетесь UTF-8 -> родной кодировки: 4 байта
Таким образом, окончательный вывод, 4 является наиболее распространенным правильный ответ, так что мы получили это право. Но в определенных контекстах вы должны быть осторожны. Например, не ожидайте, что вы можете представлять все, что вы читаете из потока UTF-8, максимум в 4 байта. Если это не юникод, вам может понадобиться до 6 байтов.
Вы * сделали * взгляните на общие ресурсы, такие как [статья UTF-8 Википедии] (http://en.wikipedia.org/wiki/UTF-8), сначала ... правильно? –
Я прочитал несколько статей, которые дали смешанные ответы ... У меня на самом деле сложилось впечатление, что ответ был 3, поэтому я очень рад, что спросил – Edd
. Я оставлю ссылку на youtube здесь, показывая персонажи Тома Скотта, символы, чудо Unicode: https: //goo.gl/sUr1Hf. Вы можете услышать и посмотреть, как все происходит от кодировки символов ASCII до utf-8. – Roylee