UTF-7, UTF-8, UTF-16 и UTF-32 - это просто форматы алгоритмического преобразования одной и той же кодировки (кодовых точек) символов. Они являются кодировками одной системы кодификации символов.
Они также алгоритмически легче перемещаться вперед и назад, чем большинство предыдущих схем для работы с наборами символов, превышающими 256 символов.
Это сильно отличается от общей кодификации глифов в зависимости от страны, а иногда и от поставщика. В одном только японском языке было множество вариаций одного JIS, не говоря уже о EUC-JP и преобразовании JIS, ориентированном на кодовую страницу, которое использовали машины DOS / Windows, называемое Shift-JIS. (В некоторой степени они были алгоритмическими преобразованиями, но они не были особенно простыми, и существовали различия в зависимости от поставщиков в доступных символах. Умножьте это на пару сотен стран и постепенную эволюцию более сложных систем шрифтов (после «зеленого экрана») эра), и у вас был настоящий кошмар.
Зачем вам нужны эти формы преобразования Unicode? Поскольку во многих унаследованных системах использовались последовательности из 7-битных символов в диапазоне ASCII, вам нужно было 7-битное чистое решение для безопасной передачи данных через эти системы без искажений, поэтому вам понадобился UTF-7. Тогда были более современные системы, которые могли бы иметь дело с 8-битными наборами символов, но обычно нулевые значения имели для них особое значение, поэтому UTF-16 для них не работал. 2 байта могли закодировать всю базовую многоязычную плоскость Unicode в своем первом воплощении, поэтому UCS-2 казался разумным подходом для систем, которые собирались быть «осведомленными об Unicode с нуля» (например, Windows NT и Java VM); тогда расширения за этим требовали дополнительных символов, что привело к алгоритмическому преобразованию кодировок на 21 бит, которые были зарезервированы стандартом Unicode, и родились суррогатные пары; что потребовало UTF-16. Если у вас было какое-то приложение, в котором согласованность ширины символов была важнее, чем эффективность хранения, UTF-32 (когда-то назывался UCS-4) был вариантом.
UTF-16 - это единственная вещь, с которой трудно справиться, и это легко смягчается небольшим диапазоном символов, на которые влияет это преобразование, и тем фактом, что ведущие 16-битные последовательности находятся в совершенно отличном диапазоне от конечного 16-битные последовательности. Это также намного проще, чем пытаться двигаться вперед и назад во многих ранних восточноазиатских кодировках, где вам либо нужен конечный автомат (JIS и EUC) для работы с escape-последовательностями, либо потенциально вы можете вернуться назад на несколько символов, пока не найдете что-то гарантированное быть только ведущим байтом (Shift-JIS). UTF-16 имеет некоторые преимущества в системах, которые также могут эффективно передавать 16-битные последовательности.
Если вам не приходилось переживать десятки (сотни, действительно) различных кодировок, или вам не приходилось создавать системы, которые поддерживают несколько языков в разных кодировках, иногда даже в одном документе (например, WorldScript в более старых версиях MacOs), вы можете подумать форматов преобразования юникод как ненужная сложность. Но это значительно уменьшает сложность по сравнению с более ранними альтернативами, и каждый формат решает реальные технические проблемы. Они также действительно эффективно конвертируются между собой, не требуя сложных справочных таблиц.