Насколько я знаю, большинство машин с использованием процессоров Intel являются малоизвестными
Процессоры Intel - это не единственные в мире процессоры. AMD, ARM и т. Д. И есть большие процессоры.
, почему ВОМ является U + FE FF для UTF-16 (BE), а не U + EF BB BF для UTF-8 или U + FF FE для UTF-16 (LE)?
U+FEFF
- обозначение кодового обозначения в Юникоде. FE FF
, EF BB BF
, FF FE
, это последовательности байтов. U+
применяется только к обозначениям кодовых точек Unicode, а не байтам.
Числовое значение Unicode U+FEFF ZERO WIDTH NO-BREAK SPACE
элемент кода (который является его официальным обозначение, а не U+FEFF BYTE ORDER MARK
, хотя это также используется в качестве BOM) является 0xFEFF
(65279).
Это значение кода, закодированное в UTF-8, генерирует три 8-битных значения кода 0xEF 0xBB 0xBF
, которые не подпадают под какие-либо проблемы с Endian, поэтому UTF-8 не имеет отдельных вариантов LE и BE.
То же значение кодового слова, закодированное в UTF-16, генерирует одно 16-разрядное значение кода 0xFEFF
.Поскольку это многобайтовое (16-разрядное) значение, оно подлежит определению endian при интерпретации двух 8-битных байтов, следовательно, варианты LE (0xFF 0xFE
) и BE (0xFE 0xFF
).
Это не только спецификация. Все кодовые модули в строке UTF-16 зависят от endian. Спецификация помогает декодеру знать конечный элемент, используемый для кодовых элементов во всей строке.
UTF-32, который также использует многобайтовые (32-разрядные) кодовые модули, также имеет значение endian, и, следовательно, он также имеет варианты LE и BE и 32-битную спецификацию для выражения этого endian для декодеров (0xFF 0xFE 0x00 0x00
для LE, 0x00 0x00 0xFE 0xFF
для BE). И да, как вы, вероятно, можете догадаться, существует двусмысленность между спецификацией UTF-16LE и спецификацией UTF-32LE, если вы не знаете заранее, с какими UTF вы имеете дело. Спецификация предназначена для идентификации конечного элемента, отсюда и название «». Байт-заказ «Марк», а не конкретное кодирование (хотя оно обычно используется для этой цели).
Ну, потому что U + FEFF является символом, а U + FFEF - нет. Пространство с нулевой шириной обладает хорошим свойством, которое не оказывает никакого влияния на визуализированный текст, даже если приложение не фильтрует его должным образом, или вбрасывает, вставляя спецификации в середине текстового потока. Очень распространенная ошибка. –
На вашем ", а не U + EF BB BF для UTF-8": довольно забавно, потому что UTF8 не нуждается в «байтовой отметке заказа». Все значения в кодированном тексте UTF8 должны быть в точности 1 байт, поэтому есть вероятность, что ваша ошибка будет неверной. – usr2564301
@ RadLexus Таким образом, UTF-8 не нуждается в спецификации, чтобы указать на контенту, в то время как UTF-16 и UTF-32? –