Почему существует несколько версий Unicode? Почему не все UTF-8? - PullRequest
0 голосов
/ 05 февраля 2020

Снова и снова я спрашиваю себя: Почему они всегда настаивают на том, чтобы все усложнять?!

Я пытался прочитать о и понимать Unicode много раз за эти годы. Когда они начинают говорить о порядке байтов и спецификациях и тому подобном, мои глаза просто «выходят за рамки». Я физически не могу продолжать читать и сохранять то, что вижу. Я принципиально не чувствую их желания слишком усложнять все.

Зачем нам нужны UTF-16 и UTF-32 и "big endian", "little endian" и спецификации, и вся эта ерунда? Почему Unicode не был определен как «совместимый с ASCII, но вы также можете использовать несколько байтов для представления всех этих дополнительных символов»? Это было бы неплохо и просто, но нет ... давайте разберемся со всем этим, чтобы Microsoft выбрала UTF-16 для Windows NT, и нет ничего легкого или прямолинейного!

Как всегда, там, вероятно, есть причина, но я сомневаюсь, что она достаточно хороша, чтобы оправдать всю эту путаницу и все эти проблемы, возникающие из-за необходимости делать ее настолько сложной и трудной для понимания asp.

1 Ответ

0 голосов
/ 05 февраля 2020

Unicode начинался как 16-битный набор символов, поэтому, естественно, каждый символ был просто закодирован как два последовательных байта. Однако быстро стало ясно, что этого будет недостаточно, поэтому предел был увеличен. Проблема заключалась в том, что некоторые языки программирования и операционные системы уже начали реализовывать Unicode как 16-битные, и они не могли просто выбросить все, что они уже создали, поэтому была разработана новая кодировка, которая оставалась обратно совместимой с этими 16-битными реализациями. в то же время позволяя полную поддержку Unicode. Это UTF-16.

UTF-32 представляет каждый символ как последовательность из четырех байтов, что совершенно непрактично и практически никогда не используется для хранения текста. Тем не менее, это очень полезно при реализации алгоритмов, которые работают с отдельными кодовыми точками, такими как различные механизмы, определенные самим стандартом Unicode, потому что все кодовые точки всегда имеют одинаковую длину, и их повторение становится тривиальным, так что иногда вы обнаружите, что он используется внутренне для буферов и тому подобного.

UTF-8 - это то, что вы на самом деле хотите использовать для хранения и передачи текста. Он совместим с ASCII и самосинхронизируется (в отличие от двух других), а также довольно компактен (в отличие от UTF-32). Он также никогда не выдаст восемь двоичных нулей подряд (если только вы не пытаетесь представить буквенный символ NULL), поэтому UTF-8 можно безопасно использовать в устаревших средах, где строки заканчиваются нулем.

Порядковый порядок равен просто свойство intrinsi c типов данных, где наименьшая значимая единица больше одного байта. Компьютеры просто не всегда соглашаются, в каком порядке читать последовательность байтов. Для Unicode эту проблему можно обойти, включив метку порядка байтов в текстовом потоке, потому что, если вы прочитаете его представление байтов в неправильном направлении в UTF-16 или UTF-32, он выдаст недопустимый символ, который не имеет причин когда-либо происходит, так что вы знаете, что этот конкретный порядок не может быть правильным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...