javascript - imagen - ¿Codificación url vs Codificación Base64(usos)?
decodificar imagen base64 javascript (3)
Me preguntaba...
(excepto el problema con el signo más + + de base64 en la cadena de consulta, que se traduce en "espacio" y se puede resolver con% 2b) : ---> ¿cuál es la forma preferida de transferir datos en la cadena de consulta?
Ambas funciones se pueden utilizar a través de los comandos JS:
btoa
-
encodeUriComponent
así que me pregunto (y usted):
¿Cuándo debo usar qué ? (Siempre he usado encodeUriCompoonent
- por instinto).
El problema es que las definiciones son diferentes, pero las implementaciones pueden ser similares ...
editar
Creo que encontré la razón para preguntar ... (y por qué nadie lo preguntó antes)
La respuesta a esto depende completamente de su aplicación del lado del servidor.
''+'' no es traducido al ''espacio'' por el cliente - se traduce automáticamente al ''espacio'' por algunas aplicaciones del lado del servidor, en gran parte por razones de compatibilidad con versiones anteriores (a la inversa, algunas aplicaciones del lado del servidor dejarán el signo ''+'' como ''+'' en conformidad con RFC3986 ).
En lo que respecta al cliente - btoa()
y encodeURIComponent()
(y encodeURI()
y escape()
) simplemente codifican una cadena de texto en diferentes cadenas abstraídas de acuerdo con diferentes algoritmos de codificación o de escape - btoa()
generalmente produce la más pequeña cadena resultante que utiliza la codificación base64 pero el comentario de meze respecto a: unicode vale la pena tenerlo en cuenta aquí.
Lo importante a tener en cuenta es lo que su aplicación del lado del servidor (alguna configuración basada en ASP.NET en su caso) utiliza para descodificar esa cadena a su forma original.
fwiw, uso base64 cuando quiero transportar cualquier cosa que PUEDE ser unicode, entre un servidor y un cliente. urlencode no maneja todos los caracteres Unicode tan bien. Se ensucia rápidamente con todos los signos de porcentaje.
así que, en resumen: esperando la entrada / salida de Unicode, siempre basará 64 el transporte.
Base64 se utiliza para transferir datos binarios. (no se admite en IE, no se pueden codificar caracteres espaciales).
encodeURIComponent solo codifica caracteres especiales.
Una cosa interesante es que no puede aplicar base64 a cadenas Unicode sin encodeURIComponent: https://developer.mozilla.org/en/DOM/window.btoa