¿Por qué solo se usa base64 en lugar de base128 para transmitir datos binarios en la web? El conjunto de caracteres ASCII tiene 128 caracteres que, en teoría, podrían representar la base 128, pero en la mayoría de los casos solo se usa base64 pero no base128.
encoding
language-agnostic
binary
gmadar
fuente
fuente
Respuestas:
El problema es que al menos 32 caracteres del conjunto de caracteres ASCII son "caracteres de control" que pueden ser interpretados por el terminal receptor. Por ejemplo, está el carácter BEL (campana) que hace que suene el timbre del terminal receptor. Están los caracteres SOT (Inicio de transmisión) y EOT (Fin de transmisión) que realizan exactamente lo que implican sus nombres. Y no olvide los caracteres CR y LF, que pueden tener significados especiales en cómo se serializan / aplanan las estructuras de datos en una secuencia.
Adobe creó la codificación Base85 para usar más caracteres en el conjunto de caracteres ASCII, pero AFAIK está protegido por patentes.
fuente
btoa
, que data de 1990, está libre de patentes y, sin duda, estas expirarían de todos modos.Porque algunos de esos 128 caracteres no se pueden imprimir (principalmente los que están por debajo del punto de código 0x20). Por lo tanto, no se pueden transmitir de manera confiable como una cadena a través del cable. Y, si supera el punto de código 128, puede tener problemas de codificación debido a las diferentes codificaciones que se utilizan en los sistemas.
fuente
Como ya se indicó en las otras respuestas, el punto clave es reducir el juego de caracteres a los imprimibles . Un esquema de codificación más eficiente es basE91 porque usa un conjunto de caracteres más grande y aún evita los caracteres de control / espacios en blanco en el rango ASCII bajo. La página web contiene una buena comparación de la eficiencia de codificación binaria frente a base64 frente a basE91 .
Una vez limpié la implementación de Java. Si la gente está interesada, podría publicarlo en GitHub.
Actualización : ahora está en GitHub .
fuente
Que los primeros 32 caracteres sean caracteres de control no tiene absolutamente ninguna relevancia, porque no es necesario usarlos para obtener 128 caracteres. Tenemos 256 caracteres para elegir y solo los primeros 32 son caracteres de control. Eso deja 192 caracteres y, por lo tanto, 128 es completamente posible sin usar caracteres de control.
Esta es la razón: tiene que ser algo que se vea igual y que pueda copiar y pegar, sin importar dónde. Por lo tanto, tiene que haber personajes que se mostrarán igual en cualquier foro, chat, correo electrónico, etc. Eso significa que no podemos usar caracteres, que los clientes de un foro / chat / correo electrónico normalmente pueden usar para formatear o ignorar. También debe haber caracteres que sean iguales, independientemente de la fuente, el idioma y la configuración regional.
¡Esa es la razón!
fuente
Base64 es común porque resuelve una variedad de problemas (funciona en casi todos los lugares que pueda imaginar)
No necesita preocuparse si el transporte está limpio de 8 bits o no.
Todos los caracteres de la codificación se pueden imprimir. Puedes verlos . Puede copiarlos y pegarlos . Puede usarlos en URL (variantes particulares). etc.
Tamaño de codificación fijo. Sabes que los
m
bytes siempre se pueden codificar enn
bytes.Todo el mundo ha oído hablar de él: es ampliamente compatible, hay muchas bibliotecas y es muy fácil interoperar con él.
Base128 no tiene todas esas ventajas.
Parece que está limpio de 8 bits, pero recuerde que base64 usa 65 símbolos. Sin un carácter fuera de banda, no puede tener los beneficios de un tamaño de codificación fijo. Si usa un carácter fuera de banda, ya no puede ser limpio de 8 bits.
Sin embargo, no todo es negativo.
base128 es más fácil de codificar / decodificar que base64; solo usa turnos y máscaras. Puede ser importante para implementaciones integradas
base128 hace un uso un poco más eficiente del transporte que base64 al usar más de los bits disponibles.
Las personas hacen uso base128 - Lo estoy usando para algo ahora. Simplemente no es tan común.
fuente
CODES
variable.No estoy seguro, pero creo que los valores más bajos (que representan códigos de control o algo así) no se transfieren de manera confiable como texto / caracteres dentro de las solicitudes / respuestas HTTP, y los valores por encima de 127 pueden ser locales / páginas de códigos / lo que sea específico, por lo que no hay 128 caracteres diferentes que se puede esperar que funcionen en todos los navegadores / plataformas.
fuente
Esaji tiene razón. Base64 se utiliza para codificar datos binarios para su transmisión mediante un protocolo que solo espera texto. Está justo en la entrada de Wiki .
fuente
Consulte la clase PHP base128. Codificación y decodificación con juego de caracteres ISO 8859-1.
GoogleCode PHP-Class Base128
fuente