Получение результатов из описаний стеков облачной информации

Без дальнейшего контекста я бы сказал, что максимальное количество байтов для символа в UTF-8 есть

ответ: 6 байт

Автор принятого ответа правильно указал это как «оригинальная спецификация», но я думаю, что это вводит в заблуждение читателя, поскольку, насколько я знаю, это все еще текущая и правильная спецификация, за wikipedia и за Google книга на UTF-8 в 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 & lt; = v7 они говорят о 3-байтовом максимуме для представления unicode с UTF-8? Это связано с тем, что исходная спецификация Юникода определяла только базовую многоязычную плоскость ( BMP ), то есть это более ранняя версия юникода или подмножество современного юникода. Итак,

ответьте, если изображаете только оригинальный юникод, BMP: 3 байта

Но OP говорит о том, чтобы идти другим путем. Не от символов до байтов UTF-8, а от байтов UTF-8 до «String» представления байтов. Возможно, автор принятого ответа получил это из контекста вопроса, но это не обязательно очевидно, поэтому может запутать случайного читателя этого вопроса.

Переход от UTF-8 к собственной кодировке, мы нужно посмотреть, как реализована «Строка». Некоторые языки, такие как Python> = 3, будут представлять каждый символ с целыми кодовыми точками, что позволяет использовать 4 байта на символ = 32 бит, чтобы покрыть 20, которые нам нужны для unicode, с некоторыми отходами. Почему не ровно 20 бит? Потому что вещи быстрее, когда они выровнены по байтам. Некоторые языки, такие как Python & lt; = 2 и Java , представляют символы с использованием кодировки UTF-16, а это означает, что они должны использовать суррогатные пары для представления расширенного unicode (а не BMP). В любом случае, это все еще 4 байта.

ответ, если происходит UTF-8 -> внутренняя кодировка: 4 байта

Итак, окончательный вывод, 4 - самый общий правильный ответ, поэтому мы Правильно. Но в определенных контекстах вы должны быть осторожны. Например, не ожидайте, что вы можете представлять все, что вы читаете из потока UTF-8, максимум в 4 байта. Если это не unicode, вам может понадобиться до 6 байтов.

35
задан Steven Yong 10 June 2019 в 07:50
поделиться