Очень часто возникающий вопрос, который связан со значением суффиксов в UTF-16LE и UTF-16BE.
Это всё идёт от того, как работают процессоры (CPU). Когда вы смотрите на байт (вроде
$41
), то очень легко сказать, что это такое. Но если вы посмотрите на два байта подряд (вроде $41 $00
), как если бы это было одно 16-битное слово, то вам надо решить, смотрите ли вы на число $4100
или на $0041
.Я всегда считал, что самое очевидное описание было дано в Hardcore Visual Basic от Bruce McKinney:
Endian ссылается на порядок, в котором хранятся байты. Этот термин взят из историй Путешествий Гулливера Джонатана Свифта, где были описаны войны между теми, кто разбивал яйца с тупого конца (Big End), и теми, кто настаивал на остром (Little End). С процессорами, как и с яйцами, не имеет значения, как вы это делаете, главное - знать, какой конец смотрит вверх.В самом деле, очень важно знать, "какой конец старший". Это особенно интересно для UTF-16, которая, в конечном итоге, - просто набор WORD, которые соответствуют символам в Unicode. Разница между U+0041 ("A", a.k.a. LATIN CAPITAL LETTER A) и U+4100 ("䄀", a.k.a. иероглиф из CJK Extension A, который означает бедствия, катастрофы, зло или несчастье) весьма важна!
На платформах Windows, которые в массе своей little endian (букв.: "остроконечный"), UTF-16LE называется просто "Unicode", а UTF-16BE носит название "Unicode (Big Endian)". Это гораздо проще для (большинства) людей, которые не работают с кросс-платформенностью.
(Говоря честно, меня это не волнует - любой, достаточно умный, чтобы увидеть несогласованность в терминологии, достаточно умён, чтобы понимать, что не все так же умны, как и он, в этих вопросах)
This post brought to you by "䄀" (U+4100, a.k.a. иероглиф в CJK Extension A, который означает бедствия, катастрофы, зло или несчастье)
Это прекрасно !!!
ОтветитьУдалить