encoding - qué - evita que los archivos que descargas en google chrome se abran automáticamente
¿Cómo mostrar un nombre de archivo no ascii en el cuadro de descarga de archivos en los navegadores? (6)
No parece haber una forma aceptada de enviar un parámetro de encabezado en formato no ascii.
El encabezado para la descarga de archivos generalmente se ve como
Contenido-disposición: archivo adjunto; filename = "theasciifilename.doc"
Excepto si destruyes una cadena codificada en utf8 en el parámetro de nombre de archivo, Firefox lo manejará bien, mientras que IE vomitará.
Hay un documento en CodeProject que explica un método para codificar el nombre de archivo.
Este documento codifica Bản Kiểm Kê.doc a B% e1% ba% a3n% 20Ki% e1% bb% 83m% 20K% c3% aa.doc mediante codificación hexadecimal de los bytes.
Problema # 1: el primer personaje en esa cadena: ả tiene un valor de ả - codifica ese número en hexadecimal y obtienes% a3% 1e. ¿Cómo obtuvo este tipo% e1% ba% a3? (Obviamente me falta algo simple aquí)
Problema n. ° 2: ¡mientras que IE reconoce esta codificación, Firefox no lo hace! ¿Qué hacer?
En el enlace que tienes arriba, e1 ba a3 es la codificación UTF-8 del personaje mencionado, no el código del personaje.
Las especificaciones básicamente no permiten nada más que US-ASCII. Los encabezados HTTP son US-ASCII. La carga útil de HTTP tiene como valor predeterminado ISO 8859-1, pero se refiere al cuerpo del contenido, no a los encabezados.
Podría decirse que lo correcto sería utilizar la técnica de MIME para codificar datos que no son ASCII en los encabezados, como se describe en RFC 2047 , pero no tengo idea de si los navegadores realmente lo admiten.
EDITAR: Vaya, no, la sección 5 del RFC 2047 dice explícitamente que la forma codificada no está permitida en Content-Disposition. Parece que no tienes suerte, no hay un estándar.
EDIT 2: Hay un estándar: RFC 2231 define cómo se supone que ahora funciona. Tiene soporte de algunos navegadores, pero no es compatible con IE. Encontré algunos casos de prueba que demuestran cómo funciona y qué soporte de navegador está disponible.
Responda (más o menos) al problema # 2:
Como descubrió que el esquema de nombres en un navegador no funciona en el otro, su única solución es hacerlo de manera diferente para cada navegador, similar al ejemplo aquí .
En caso de que el enlace desaparezca, la solución es básicamente:
1. If browser is IE URL encode filename
2. Generate Content-disposition header
Por supuesto, determinar si el navegador es IE por User-agent (que es la única forma en que puede hacerlo) está plagado de todo tipo de peligro.
Conforme suene tan céntrico en América del Norte, si es importante que funcione en una gran cantidad de navegadores que no controla y que pueden tener bloqueado o modificado el agente de usuario, entonces simplemente evite los caracteres codificados en UTF-8 en el nombre del archivo y siempre usa "Descargar" o algo.
Respuesta a la pregunta n. ° 1: confunde Unicode y UTF-8. El valor hexadecimal de ''ả'' es 0xA31E, pero no es un carácter UTF-8. En UTF-8 ese carácter requiere tres bytes, 0xE1 0xBA 0xA3
. La codificación URL está pobremente definida para codificaciones que no son ascii, pero% e1% ba% a3 es la codificación UTF-8 válida para usar para ese carácter.
Para el problema n. ° 2 necesitas codificar URL para el nombre de archivo tanto para Internet Explorer como para Firefox. La única diferencia es que debe usar el formato de RFC 2231 en Firefox. Esto se aplica a Firefox 3 e Internet Explorer 7.
Desafortunadamente, actualmente no existe una forma única que funcione en todos los Agentes de usuario.
Vea http://greenbytes.de/tech/tc2231/ para casos de prueba, luego presente una queja a Microsoft, Google y Apple.