Qu'est-ce que le texte schéma de codage utilisez-vous lorsque vous avez des données binaires que vous devez envoyer sur un canal ascii?
Question
Si vous avez des données binaires que vous devez encoder, ce schéma de codage utilisez-vous?
Je sais:
- Hex encodage . Très simple, mais assez bavard, se développe un octet à deux.
- Base 64 . La plupart des communes, pas si bavard, se développe trois octets à quatre.
- base 85 . Pas courant, moins bavard à nouveau, étend quatre octets à cinq.
Y at-il d'autres schémas de codage en usage courant? Si oui, quels sont-il des avantages et des inconvénients?
Modifier : Ceci est utile, par exemple, lorsque vous essayez de stocker des données arbitraires dans un cookie. Les cookies ne peuvent stocker du texte, pas de données arbitraires, de sorte que vous devez le convertir en quelque sorte, de préférence avec un moyen de reconvertir. En outre, supposons que vous utilisez un serveur sans état afin que vous ne pouvez pas enregistrer l'état sur le serveur et il suffit de mettre un identifiant dans le cookie. Bien sûr, si vous faites cela, vous aurez également besoin d'une certaine façon de vérifier que ce que l'utilisateur passe de nouveau à vous est ce que vous avez passé à l'utilisateur, par exemple une signature.
En outre, puisque le consensus actuel est que vous devez utiliser base64 car il est très répandu, je signale aussi que ce est ce que je l'utilise ... Je suis juste curieux de savoir si quelqu'un utilise autre chose , et si oui, pourquoi.
Modifier : Juste au cas où quelqu'un tombe par hasard sur ce, si vous ne voulez utiliser base64 pour stocker des données dans un cookie, vous devez utiliser une mise en œuvre base64 modifié . Voir cette réponse pour la raison.
La solution
Pour l'encodage des valeurs de cookie, vous devez être prudent. Voir cette réponse plus:
Avec la version 0 les cookies, les valeurs doivent ne contiennent pas d'espace blanc, entre parenthèses, entre parenthèses, égaux signes , des virgules, guillemets doubles, barres obliques, question marques, à des signes, colonnes, et des points-virgules. Les valeurs vides ne peuvent pas se comporter de la même manière sur tous les navigateurs.
encodage base64 peut générer des symboles de =
pour certaines entrées, ce qui techniquement ne sont pas autorisés dans les cookies (version 0 cookies, de toute façon, qui sont les plus largement pris en charge). Dans la pratique, je soupçonne que le =
va effectivement fonctionner correctement, mais peut-être pas.
Je dirais que, pour être absolument sûr que votre binaire est encodée à l'emporte-compatible, puis le codage hexadécimal de base est le plus sûr (par exemple en java ).
modifier Comme souligné @ Paul obligeamment, il y a un
modifier : @shoosh a souligné que le =
est utilisé pour indiquer la fin de la chaîne base64, de sorte que vous pouvez couper le =
, réglez le cookie, puis reconnectez à nouveau le =
lorsque vous avez besoin pour le décoder.
Autres conseils
base64 gagne parce qu'il est si commun que je n'ai pas à vous soucier jamais de rouler mon propre encodeur / décodeur. Je n'ai pas courir dans toutes les applications où je suis inquiet à propos de l'enregistrement de la bande passante ou filespace en données binaires codées.
- Uuencode est populaire est certains cercles
- HTML et XML encode unicode en utilisant cette syntaxe
base64 est le standard de facto. Utiliser autre chose est d'avoir des ennuis.