Pourquoi tout le monde utilise-t-il la base 64 pour transmettre des données binaires sur le Web? Je demande cela parce que le jeu de caractères ASCII a 128 caractères qui pourraient théoriquement représenter la base 128 ...
Réponses
Trop de publicités?Le problème, c'est qu'au moins 32 caractères du jeu de caractères ASCII sont " des caractères de contrôle qui peut être interprété par le terminal de réception. E. g., il y a le BEL (bell) caractère qui fait que le terminal de réception carillon. Il y a le SOT (Début De la Transmission) et EOT (Fin De Transmission) des personnages qui effectue exactement ce que leurs noms l'indiquent. Et n'oubliez pas les caractères CR et LF, ce qui peut avoir une signification particulière dans la façon dont les structures de données sont sérialisées/aplatie dans un cours d'eau.
Adobe a créé le Base85 l'encodage à utiliser d'autres caractères dans le jeu de caractères ASCII, mais autant que je sache, elle est protégée par des brevets.
Parce que certains de ces 128 caractères sont non imprimables (principalement ceux situés en dessous du point de code 0x20). Par conséquent, ils ne peuvent pas être transmis de manière fiable sous forme de chaîne sur le fil. De plus, si vous dépassez le code 128, vous pouvez avoir des problèmes d’encodage en raison de différents encodages utilisés d’un système à l’autre.
Comme déjà dit dans les autres réponses, le point clé est de réduire le jeu de caractères à la imprimableceux. Plus efficace schéma de codage est basE91 parce qu'il utilise un plus grand jeu de caractères et encore évite de contrôle/les espaces de la faible plage ASCII. La page web contient une belle comparaison binaire vs base64 vs basE91 l'efficacité de l'encodage.
Une fois, j'ai nettoyé l'implémentation de Java. Si les gens sont intéressés je pourrais pousser sur GitHub.
Mise à jour: Il est désormais sur GitHub.
Pas une seule de ces réponses sont correctes. Que les 32 premiers caractères sont des caractères de contrôle n'a absolument aucune importance, parce que vous n'avez pas à les utiliser pour obtenir les 128 caractères. Nous avons 256 caractères à choisir, et seuls les 32 premiers sont des caractères de contrôle. Qui laisse 192 caractères, et, par conséquent, 128 est tout à fait possible sans l'aide des caractères de contrôle.
Voici la raison: Il doit être quelque chose qui va ressembler à la même chose, et que vous pouvez copier et coller, n'importe où. À cet effet, il a pour caractères qui sera affichée de la même manière sur n'importe quel forum, chat, e-mail et ainsi de suite. Cela signifie que nous ne pouvons pas utiliser des caractères, qu'un forum/chat/les clients de messagerie peuvent généralement utiliser pour la mise en forme ou ignorer. Il dispose également d'avoir des personnages qui sont les mêmes, quelle que soit la police, la langue et les paramètres régionaux.
C'est la raison pour!
Pas sûr, mais je pense que les valeurs les plus basses (représentant les codes de contrôle ou quelque chose) ne sont pas transférées de manière fiable en tant que texte / caractères dans les requêtes / réponses HTTP, et que les valeurs supérieures à 127 pourraient être locales / codepage / quelle que soit la spécificité. 128 caractères différents pouvant fonctionner sur tous les navigateurs / plates-formes.