Remarque : Windows utilise le terme "Unicode" pour UCS-2 pour des raisons historiques - à l'origine, il s'agissait de l'appellation "Unicode". sólo pour encoder les points de code Unicode en octets, la distinction n'avait donc pas d'importance. Mais dans la terminologie moderne, les deux Les exemples sont Unicode, mais le premier est spécifiquement UCS-2 ou UTF-16 et le second est UTF-8.
L'UCS-2 avait un big-endian et un little-endian parce qu'il représentait directement le point de code sous la forme d'un nombre 16 bits "uint16_t" ou "short int", comme en C et dans d'autres langages de programmation. Il ne s'agit pas tant d'un "codage" que d'une représentation directe en mémoire des valeurs numériques, et comme un uint16_t peut être BE ou LE sur différentes machines, il en va de même pour l'UCS-2. L'UTF-16 ultérieur a simplement hérité du même désordre pour des raisons de compatibilité.
(Il est probable que pourrait auraient été définis pour un endianness spécifique, mais je suppose qu'ils ont estimé que c'était hors de portée ou qu'ils ont dû faire un compromis entre des personnes représentant différents fabricants de matériel ou quelque chose comme ça. Je ne connais pas l'histoire réelle).
En revanche, UTF-8 est un longueur variable qui peut utiliser entre 1 et 6 octets pour représenter une valeur de 31 bits. La représentation par octet n'a aucun rapport avec l'architecture du processeur. il existe un algorithme spécifique pour encoder un nombre en octets, et vice versa. L'algorithme produit ou consomme toujours les bits dans le même ordre, quelle que soit l'unité centrale sur laquelle il est exécuté.