2009-11-25 13 views
8

Sto provando a caratteri URL-escape (percentuale-codifica) non-ascii in diversi URL con cui ho a che fare. Sto lavorando con un'applicazione flash che carica risorse come immagini e clip audio da questi URL. Poiché i nomi di file possono contenere caratteri non ASCII, in questo modo: 日本語.jpg li fuggo da utf-8 codifica dei caratteri, e quindi cento-sfuggire i byte unicode, ottenere la seguente:URL Escaping caratteri Unicode cinesi/giapponesi per Internet Explorer

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

Questi nomi di file funzionano correttamente quando eseguo l'app in qualsiasi browser diverso da Internet Explorer: ho provato Firefox, Safari e Chrome. Ma quando lancio l'applicazione in IE (provato entrambi 6 e 8) e cerca di caricare il clip audio, ottengo: Error #2044: Unhandled ioError, e l'URL è stato danneggiato a qualcosa di simile:

æ¥æ¬èª.jpg

Qualsiasi pensieri su come risolvere questo? Questo è solo test-guida l'app flash con URL del filesystem locali. Ho anche notato che Internet Explorer non è in grado di individuare un file, ad esempio: file:///C:/%E6%97%A5%E6%9C%AC%E8%AA%9E.jpg, anche se Chrome/Firefox decodificarlo e carico più che bene per un file con il percorso

C:\日本語.jpg

modificare

Penso che il mio problema è lo stesso di quello riscontrato nel seguente frammento di codice ActionScript:

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

L'utilizzo della stringa 日本語.jpg funzionerà in IE, mentre l'utilizzo della stringa %E6%97%A5%E6%9C%AC%E8%AA%9E.jpg funziona in altri browser. Quello di cui ho bisogno è un singolo modulo che funzioni in tutti i browser. Ho provato la codifica %u e l'impostazione dell'intestazione della richiesta http su Content-Type: text/html; charset=utf-8 senza fortuna in forma di escape con percentuale o senza caratteri di escape.

+0

Windows utilizza UTF-16 per i nomi di file. Quindi prova '% 65% E5% 67% 2C% 8A% 9E'. – Gumbo

+0

Nessun dado con il nome UTF-16, IE non è stato ancora in grado di localizzarlo. – Bear

+0

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

risposta

1

Siamo spiacenti, nessuna soluzione, ma forse almeno qualche informazione in più su cosa potrebbe succedere qui. (Probabilmente hai già capito tutto questo, ma forse aiuterà un altro lettore a trovare una soluzione.) La specifica di codifica url "ufficiale" sembra lasciare la porta spalancata su come decodificare gli URL di escape come quelli che stai generando - sono le entità in fuga che intendono rappresentare i caratteri UTF-8 (come Firefox, ecc. li stanno interpretando) oi caratteri ASCII (come IE li sta interpretando)? Non conosco alcun modo per forzare la strategia di decodifica desiderata.

Solo una domanda: che cosa brutta succede se non li sfuggono affatto, ma lascia l'unicode nell'URL? Anche se non ho molta esperienza con esso, ho pensato di ricordare di aver letto da qualche parte che i giorni di dover sfuggire all'unicode in urls sono dietro di noi. Potrebbe esserci di sbagliato ...

+0

La maggior parte dei browser sembra ok con url contenenti caratteri unicode. Sto costruendo un'applicazione Flex, però, e i miei url sono collegamenti a risorse esterne come clip audio, immagini, filmati, ecc. Quando eseguo il .swf compilato nel plug-in flash, queste risorse si caricano solo se i caratteri unicode sono url/percento sfuggito a UTF-8. Altrimenti non riescono a caricare. Questi nomi di file con percentuale di escape funzionano correttamente in tutti i browser ad eccezione di Internet Explorer. – Bear

+0

URI/URL (RFC 3986) richiede la codifica di caratteri non ASCII. IRI (RFC 3987), d'altra parte, consente la maggior parte dei caratteri Unicode non codificati. L'IRI è il nuovo standard che sostituisce il vecchio standard URI/URL, ma molti sistemi non implementano ancora l'IRI. Le specifiche IRI forniscono regole per convertire un IRI in un URI/URL e viceversa. –

1

IE utilizza UTF-8 per URL Url, ma non sono sicuro degli URL di file (anche se ho testato il comportamento come parte del team di IE circa 10 anni fa). Se stai utilizzando gli URL in HTML, in realtà ti consiglio di provare i letterali stringa (se la codifica della pagina è UTF-8) o i riferimenti numerici ai caratteri (& #dddd;). In genere IE convertirà i caratteri in una codifica appropriata, che sarebbe UTF-8 per il materiale HTTP e UTF-16 per le interazioni del file system locale.

In realtà è HTTP che richiede l'escape dell'URL, non il parser HTML.

1

Provare a codificare solo le parti dell'URI che potrebbero essere analizzate in modo errato. Ad esempio, codifica &,?, E spazio. Lascia tutto il resto così com'è, e dovrebbe funzionare come un incantesimo.

Se si riscontrano ancora problemi, potrebbe essere necessario impostare il tipo di contenuto in utf nelle intestazioni http. Qualcosa come Content-type: text/html; charset = UTF-8.

+0

Sfortunatamente, il framework con cui sto lavorando - Flex - non gestisce i caratteri senza escape, non ASCII particolarmente bene. Devo trovare se c'è un modo corretto per aggirare questo. Esplorerò il framework Flex per vedere se è possibile accedere alle intestazioni HTTP, ma speravo in una soluzione di livello più alto. – Bear

1

Perché non utilizzare solo sequenze di escape Unicode? Incollare questo in un corpo di una pagina web HTML per vedere quello che voglio dire:

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

ottengo% u65E5% u672C% u8A9E.jpg.

+0

Questi purtroppo non funzionano per me. È un modo standard per sfuggire agli URL? Firefox non è stato in grado di caricare un URL del modulo: 'file: ///.../% u3400.jpg', per un file denominato' 㐀 .jpg' sul percorso specificato. – Bear

+0

Scusa, suppongo che funzioni solo per JavaScript escape/unescape. Ho provato la tua codifica e funziona per il mio localhost. Come menzionato in precedenza, potrebbe essere necessario comunicare al server che si sta utilizzando UTF-8 in un'intestazione. – Ishmael

+0

Se la tua pagina host ha un meta tag di codifica, ciò dovrebbe fare per convincere il server che stai parlando UTF-8. Penserei. Può essere. – Ishmael

1

Da quello che ho testato, ho notato che IE non tratta gli URL dei file codificati ma tratta i normali URL http, quindi questo potrebbe essere il problema. Non sono sicuro di come li stai caricando, ma dovresti controllare il problema.

+0

Questo risulta essere il problema. Il controllo flash active-x (IE) carica solo URL di file non codificati, mentre il plug-in flash (Chrome, Firefox, Safari, ecc.) Carica solo URL di file codificati. L'unica soluzione che ho potuto pensare a finora è: se Flash Player è attivo-x Usa URL non codificato altro uso con codifica URL url po 'hacky se mi chiedete. – Bear

1

file: // il protocollo dipende dalle impostazioni della regione del sistema operativo, se le impostazioni di sistema non sono impostate su cinese ma inglese, non è possibile consentire a IE di farlo.