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 также не ориентированы на байты?