2009-11-25 18 views
8

Estoy tratando de escapar de URL (porcentaje de codificación) caracteres no ascii en varias URL con las que estoy tratando. Estoy trabajando con una aplicación flash que carga recursos como imágenes y clips de sonido desde estas URL. Dado que los nombres de archivo pueden contener caracteres no ASCII, así: 日本語.jpg I a escapar por UTF-8 codificación de los caracteres, y luego por ciento-escapar de los bytes Unicode, para obtener lo siguiente:URL que escapa de caracteres Unicode chinos/japoneses para Internet Explorer

%E6%97%A5%E6%9C%AC%E8%AA%9E.jpg

Estos nombres de archivo funcionan bien cuando ejecuto la aplicación en cualquier navegador que no sea Internet Explorer. He probado Firefox, Safari y Chrome. Pero cuando inicio la aplicación en el IE (intentado tanto 6 y 8) y se intenta cargar el clip de sonido, me sale: Error #2044: Unhandled ioError, y la URL se ha corrompido a algo como:

æ¥æ¬èª.jpg

Cualquier pensamientos sobre cómo solucionar esto? Esto es solo probar la aplicación flash con las URL locales del sistema de archivos. He también notó que Internet Explorer no es capaz de localizar un archivo, tales como: file:///C:/%E6%97%A5%E6%9C%AC%E8%AA%9E.jpg, aunque Chrome/Firefox decodificarlo y carga muy bien para un archivo con la ruta

C:\日本語.jpg

editar

Creo que mi problema es la misma que la encontrada en el siguiente fragmento de código ActionScript:

import flash.display.Loader; 
import flash.net.URLRequest; 
... 
var ldr:Loader; 
var req:URLRequest = new URLRequest("日本語.jpg"); 
ldr = new Loader(); 
ldr.load(req); 

El uso de la cadena 日本語.jpg funcionará en IE, mientras que el uso de la cadena %E6%97%A5%E6%9C%AC%E8%AA%9E.jpg funciona en otros navegadores. Lo que necesito es un formulario único que funcione en todos los navegadores. Probé la codificación %u y establecí el encabezado de solicitud http en Content-Type: text/html; charset=utf-8 sin suerte en forma de porcentaje de escape o no.

+0

Windows usa UTF-16 para nombres de archivo. Por lo tanto, intente con '% 65% E5% 67% 2C% 8A% 9E'. – Gumbo

+0

No hay dados con el nombre UTF-16, IE todavía no pudo encontrarlo. – Bear

+0

relacionado: http://stackoverflow.com/questions/75980/best-practice-escape-or-encodeuri-encodeuricomponent – cregox

Respuesta

1

Lo siento, no hay solución, pero tal vez al menos algo más de información sobre lo que podría estar pasando aquí. (Probablemente ya se haya dado cuenta de esto, pero tal vez ayude a otro lector a encontrar una solución.) La especificación de codificación de URL "oficial" parece dejar la puerta abierta en cuanto a cómo decodificar urls escapadas como las que está generando --las entidades escapadas intentan representar caracteres UTF-8 (como Firefox, etc. los interpretan) o caracteres ASCII (como IE los está interpretando)? No sé de ninguna manera para forzar la estrategia de descodificación deseada.

Solo una pregunta: ¿qué es lo malo que está pasando si no se les escapa en absoluto, pero dejan el Unicode en la url? Aunque no tengo mucha experiencia con eso, pensé que recuerdo haber leído en alguna parte que los días de necesidad de escapar Unicode en urls han quedado atrás. Podría estar equivocado sobre eso ...

+0

La mayoría de los navegadores parecen correctos con las URL que contienen caracteres Unicode. Sin embargo, estoy creando una aplicación Flex y mis URL son enlaces a recursos externos como clips de sonido, imágenes, películas, etc. Cuando ejecuto el archivo .swf compilado en el complemento flash, estos activos solo se cargan si están caracteres unicode. url/porcentaje escapó UTF-8. De lo contrario, simplemente no pueden cargar. Estos nombres de archivo con porcentaje de escape funcionan bien en todos los navegadores, excepto en Internet Explorer. – Bear

+0

URI/URL (RFC 3986) requiere la codificación de caracteres que no sean ASCII. IRI (RFC 3987), por otro lado, permite que la mayoría de los caracteres Unicode no estén codificados. IRI es el nuevo estándar que reemplaza el antiguo estándar URI/URL, pero muchos sistemas aún no implementan el IRI. La especificación IRI proporciona reglas para convertir un IRI en un URI/URL y viceversa. –

1

IE usa UTF-8 para HTTP Urls, pero no estoy seguro acerca de las URL de archivos (aunque probé el comportamiento como parte del equipo de IE hace unos 10 años). Si está utilizando URLS en HTML, en realidad recomendaría probar cadenas literales (si la codificación de su página es UTF-8) o referencias de caracteres numéricos (& #dddd;). IE generalmente convertirá los caracteres en una codificación apropiada, que sería UTF-8 para las cosas HTTP y UTF-16 para las interacciones locales del sistema de archivos.

En realidad, HTTP necesita el URL que se escapa, no el analizador HTML.

1

Intente codificar solo las partes del URI que harían que se analizara incorrectamente. Por ejemplo, codifique &,? Y espacio. Deje todo lo demás como está, y debería funcionar como un amuleto.

Si aún tiene problemas, es posible que necesite establecer el tipo de contenido en utf en sus encabezados http. Algo así como Content-type: text/html; charset = UTF-8.

+0

Desafortunadamente, el marco con el que estoy trabajando - Flex - no maneja particularmente bien los caracteres no escamados y no ascii. Necesito encontrar si hay una forma adecuada de evitar esto. Voy a profundizar en el marco de Flex para ver si es posible acceder a los encabezados HTTP, pero esperaba una solución de nivel superior. – Bear

1

¿Por qué no usar secuencias de escape Unicode? Pega esto en un cuerpo de una página web HTML para ver lo que quiero decir:

<script type="text/javascript"> 
     var fileName = "日本語.jpg"; 
     document.write(escape(fileName)); 
    </script> 

llego% u65E5% u672C% u8A9E.jpg.

+0

Desafortunadamente no funcionan para mí. ¿Es esta una forma estándar de escapar de las URL? Firefox no pudo cargar una URL del formulario: 'file: ///.../% u3400.jpg', para un archivo llamado' 㐀 .jpg' en la ruta especificada. – Bear

+0

Lo siento, creo que solo funciona para JavaScript escape/unescape. Probé tu codificación y funciona para mi servidor local. Como se menciona en otro lugar, es posible que necesite decirle al servidor que está enviando UTF-8 en un encabezado. – Ishmael

+0

Si su página de host tiene una metaetiqueta de codificación, eso debería hacer para convencer al servidor de que está hablando UTF-8. Pensaría. Tal vez. – Ishmael

1

Según lo que he probado, me di cuenta de que IE no trata las URL de archivos codificados, pero sí trata las URL de http normales, por lo que ese podría ser el problema. No estoy seguro de cómo los está cargando, pero debería verificar ese problema.

+0

Esto resulta ser el problema. El control flash active-x (IE) solo carga las URL de los archivos no codificados, mientras que el complemento de flash (Chrome, Firefox, Safari, etc.) solo cargará las URL de los archivos codificados. La única solución que he podido pensar hasta ahora es: si Flash player is active-x uso url sin codificar demás uso de codificación URL url un poco hacky si me preguntas. – Bear

1

file: // el protocolo depende de la configuración regional de su SO, si la configuración de su sistema no está configurada en chino sino en inglés, no puede dejar que IE lo haga.

Cuestiones relacionadas