UTF-8 может содержать спецификацию.Тем не менее, нет никакой разницы в отношении байтового потока.UTF-8 всегда имеет один и тот же порядок байтов.
Если Utf-8
хранит все кодовые точки в одном байте, то будет иметь смысл, почему порядковый номер не играет никакой роли и, следовательно, почему BOM
не требуется.Но поскольку кодовые точки 128 и выше хранятся с использованием 2, 3 и до 6 байтов, это означает, что их порядок байтов на машинах с прямым порядком байтов отличается от порядка на машинах с прямым порядком байтов, поэтому как мы можем утверждать, что Utf-8
всегда имеет одинаковый порядок байтов?
Спасибо
РЕДАКТИРОВАТЬ:
UTF-8 ориентирован на байты
Я понимаю, что если два байта UTF-8
символ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:
В ответ на ваши изменения: машины с прямым порядком байтов не меняют местами байты, если вы просите их прочитатьбайт за раз.
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 )?
Если вы считаете, что видите что-то другое, пожалуйста, отредактируйте свой вопрос и включите
Я не говорю этого.Я просто не понимаю, что происходит
в) Почему Utf-16 и Utf-32 также не ориентированы на байты?