Pregunta ¿Por qué la gente no usa base128? [cerrado]


¿Por qué todos usan la base 64 para transmitir datos binarios en la web? Lo pregunto porque el juego de caracteres ASCII tiene 128 caracteres que en teoría podrían representar 128 bases ...


75
2018-05-15 11:18


origen


Respuestas:


El problema es que al menos 32 caracteres del juego 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 sonar la campana receptora. 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 te olvides de los personajes CR y LF, que mayo tienen un significado especial en cómo las estructuras de datos se serializan / aplanan en una secuencia.

Adobe creado la codificación Base85 para usar más caracteres en el juego de caracteres ASCII, pero AFAIK está protegido por patentes.


88
2018-05-15 13:43



Debido a que algunos de esos 128 caracteres no son imprimibles (principalmente aquellos que están por debajo del punto de código 0x20). Por lo tanto, no se pueden transmitir confiablemente como una cadena sobre el cable. Y, si pasa por encima del punto de código 128, puede tener problemas de codificación debido a las diferentes codificaciones utilizadas en los sistemas.


62
2018-05-15 11:23



Como ya se dijo en las otras respuestas, el punto clave es reducir el conjunto de caracteres al imprimible unos. Un esquema de codificación más eficiente es basE91 porque usa un conjunto de caracteres más grande y aún así evita los caracteres de control / espacio en blanco en el rango ASCII bajo. La página web contiene una buena comparación de binario vs. base64 vs. basE91 eficiencia de codificación.

Una vez limpié la implementación de Java. Si las personas están interesadas, podría presionarlo en GitHub.

Actualizar: Nieva en GitHub.


14
2018-05-15 14:59



Que los primeros 32 caracteres sean de control no tiene ninguna relevancia, porque no tiene que 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 verá igual, y que puede copiar y pegar, sin importar dónde. Por lo tanto, tiene que ser caracteres que se mostrarán de la misma manera en cualquier foro, chat, correo electrónico, etc. Eso significa que no podemos usar caracteres, que un foro / chat / cliente de correo electrónico puede usar para formatear o ignorar. También tiene que ser caracteres iguales, independientemente de la fuente, el idioma y la configuración regional.

¡Esa es la razón!


13
2017-12-19 13:07



Base64 es común porque resuelve una variedad de problemas (funciona en casi todos los lugares que se pueda imaginar)

  • No necesita preocuparse si el transporte es 8 bits limpios o no.

  • Todos los caracteres en la codificación son imprimibles. Usted puede ver ellos. Usted puede copiar y pegar ellos. Puede usarlos en URL (variantes particulares). etc.

  • Se corrigió el tamaño de la codificación. Tú lo sabes mlos bytes siempre pueden codificar a n bytes.

  • Todo el mundo ha oído hablar de él: es ampliamente compatible, muchas bibliotecas, por lo que es fácil interactuar.

Base128 no tiene todas esas ventajas.

Parece que está limpio en 8 bits, pero recuerda 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 podrá limpiar 8 bits.

Aunque 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.

Gente hacer usa base128 - Lo estoy usando para algo ahora. Simplemente no es tan común.


9
2017-10-13 03:45



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 HTTP-requests / responses, y los valores superiores a 127 pueden ser locales / codepage / whatever-specific, por lo que no 128 caracteres diferentes que se puede esperar que funcionen en todos los navegadores / plataformas.


4
2018-05-15 11:22



Esaji tiene razón. Base64 se utiliza para codificar datos binarios para su transmisión utilizando un protocolo que solo espera texto. Está justo en el Wiki entrada.


3
2018-05-15 11:24



Verifique la base128 PHP-Class. Codificación y decodificación con juego de caracteres ISO 8859-1.

GoogleCode PHP-Class Base128


2
2018-05-05 11:57