символа - таблица unicode для русских букв




Разве это не на больших байтовых машинах UTF-8, отличных от маленьких конечных машин? Так почему же тогда UTF-8 не требует спецификации? (2)

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 автоматически меняет байты?

Надеюсь, что вопрос имеет смысл

EDIT 2:

В ответ на ваше редактирование: машины большого конца не меняют байты, если вы попросите их прочитать байт за раз.

a) О, так что, хотя символ C имеет длину 2 байта, приложение (находящееся на BEM ) чтение F будет считывать в память только один байт в то время (таким образом, он сначала будет считываться в память B1 и только тогда B2 )

б)

В UTF-8 вы решаете, что делать с байтом на основе его старших бит

Предполагая, что файл F имеет два последовательных символа C и C1 (где C состоит из байтов B1 и B2, а C1 имеет байты B3 , B4 и B5 ). Как приложение, считывающее F, знает, какие байты принадлежат друг другу, просто проверив биты высокого порядка каждого байта (например, как будет выяснено, что B1 и B2 вместе взятые должны представлять символ, а не B1 , * B2 * и B3 )?

Если вы считаете, что видите что-то другое, отредактируйте свой вопрос и включите

Я этого не говорю. Я просто не понимал, что происходит

c) Почему UT-16 и Utf-32 также не ориентированы на байты?


Для ответа c): UTF-16 и UTF-32 представляют символы как 16-битные или 32-битные слова, поэтому они не являются байт-ориентированными.

Для UTF-8 наименьшая единица является байтом, поэтому она байт-ориентирована. Алорифм читает или записывает один байт за раз. Байт представлен одинаково на всех машинах.

Для UTF-16 наименьшая единица - это 16-битное слово, а для UTF-32 наименьшая единица - это 32-битное слово. Алгоритм считывает или записывает по одному слову за раз (2 байта или 4 байта). Порядок байтов в каждом слове отличается на машинах большого и малого порядков.


Порядок байтов отличается от большого числа endian vs little endian для слов / целых чисел больше байта.

например, на машине большого конца короткое целое число из 2 байтов хранит 8 наиболее значимых бит в первом байте, 8 младших значащих бит во втором байте. На машине с маленькими байтами 8 наиболее значимых бит будут вторым байтом, 8 младшими значащими битами в первом байте.

Таким образом, если вы записываете содержимое памяти такого короткого int непосредственно в файл / сеть, порядок байтов в коротком int будет отличаться в зависимости от контенты.

UTF-8 является байтовым ориентиром, поэтому нет проблемы с контентом. первый байт всегда является первым байтом, второй байт всегда является вторым байтом и т. д., независимо от его сущности.







utf-8