UTF-8 может содержать спецификацию. Однако это не имеет никакого значения в отношении сущность байтового потока. UTF-8, всегда имеет тот же порядок байтов.
Если Utf-8 хранит все кодовые точки в одном байте, тогда будет понятно, почему endianness не играет никакой роли, и поэтому BOM не требуется. Но так как коды 128 и выше хранятся с использованием 2, 3 и до 6 байтов, что означает, что их порядок байтов на машинах большого конца отличается от маленьких конечных машин, поэтому как мы можем утверждать, что Utf-8 всегда имеет тот же порядок байтов?
Спасибо
EDIT:
UTF-8 является байт-ориентированным
Я понимаю, что если два байта Utf-8 character C состоит из байтов B1 и B2 (где B1 - первый байт, а B2 - последний байт), то с Utf-8 эти два байта всегда записывается в том же порядке (таким образом, если этот символ записывается в файл на маленькой конечной машине LEM, B1 будет первым и B2 последним. Аналогично, если C записывается в файл на большом конце машина BEM, B1 будет по-прежнему первой и B2 еще последней).
Но что происходит, когда C записывается в файл F на LEM, но мы копируем F в BEM и пытаемся его прочитать? Поскольку BEM автоматически меняет байты (B1 теперь последний и B2 первый байт), как приложение (работает на BEM), читающее F, знает, было ли F создано на BEM и, следовательно, порядок двух байты не были заменены или был отправлен F из LEM, и в этом случае BEM автоматически менял байты?
Надеюсь, что вопрос имел какой-то смысл
ИЗМЕНИТЬ 2:
В ответ на ваше редактирование: big-endian машины не меняют байты, если вы спросите их читать байты за раз.
a) О, так что, хотя символ C имеет длину 2 байта, приложение (находящееся на BEM), считывающее F, будет считывать в память только один байт в то время (таким образом, он сначала будет считываться в память B1 и только тогда B2)
b)
В UTF-8 вы решаете, что делать с байт на основе его старших бит
Предполагая, что файл F имеет два последовательных символа C и C1 (где C состоит из байтов B1 и B2, а C1 имеет байты B3, B4 и B5). Как приложение чтения F знает, какие байты принадлежат друг другу, просто проверив каждый бит старшего разряда (например, как он будет понимать, что B1 и B2 вместе взятые должны представлять символ, а не B1, * B2 * и B3)?
Если вы считаете, что видите что-то другое, отредактируйте свои вопрос и включить
Я не говорю этого. Я просто не понимал, что происходит.
c) Почему UT-16 и Utf-32 также не ориентированы на байты?