Pourquoi Java utilise-t-il UTF-8 modifié au lieu de UTF-8?

Pourquoi Java utilise -t-il l’UTF-8 modifié plutôt que l’UTF-8 standard pour la sérialisation d’objects et JNI?

Une explication possible est que l’UTF-8 modifié ne peut pas avoir de caractères nuls incorporés et que, par conséquent, il est possible d’utiliser des fonctions qui fonctionnent avec des chaînes terminées par un caractère nul. Y a-t-il d’autres raisons?

C’est plus rapide et plus simple pour gérer les caractères supplémentaires (en ne les manipulant pas).

Java représente les caractères sous forme de caractères 16 bits, mais l’unicode a évolué pour contenir plus de 64 000 caractères. Ainsi, certains caractères, les caractères supplémentaires, doivent être codés en 2 caractères (paires de substitution) en Java.

Ssortingct UTF-8 nécessite que le codeur convertisse les paires de substitution en caractères, puis les codes en octets. Le décodeur doit fractionner les caractères supplémentaires en paires de substitution.

 chars -> character -> bytes -> character -> chars 

Puisque les deux extrémités sont Java, nous pouvons prendre un raccourci et encoder directement au niveau des caractères

 char -> bytes -> char 

ni l’encodeur ni le décodeur n’ont besoin de s’inquiéter des paires de substitution.

Je soupçonne que c’est la raison principale. En C, le fait de devoir gérer des chaînes peut contenir des NUL incorporés, ce qui compliquerait les choses.

Il existe une bonne description de UTF-8 modifié dans Unicode Explained – Page 306 , mais cela n’explique pas pourquoi la modification de l’utilitaire UTF-8 modifié a été prise.

La propre documentation de Java contient également une explication très détaillée de la manière dont la prise en charge des caractères Unicode non BMP a été ajoutée à Java: Caractères supplémentaires de la plate-forme Java . Mais encore une fois, aucune explication quant à la raison pour laquelle le UTF-8 modifié a été décidé.

Je ne pense pas que vous allez trouver un pourquoi, à moins de demander directement aux architectes de Java.