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, он выдаст недопустимый символ, который не имеет причин когда-либо происходит, так что вы знаете, что этот конкретный порядок не может быть правильным.