Ich versuche URL-Escape-Zeichen (Prozent-Encodierung) von nicht-ASCII-Zeichen in mehreren URLs, mit denen ich es zu tun habe. Ich arbeite mit einer Flash-Anwendung, die Ressourcen wie Bilder und Soundclips von diesen URLs lädt. Da die Dateinamen nicht-ASCII-Zeichen enthalten können: %Code% Ich entkomme ihnen durch utf-8 Codierung der Zeichen, und dann Prozent-Entkommen der Unicode-Bytes, um Folgendes zu erhalten:
日本語.jpg
Diese Dateinamen funktionieren gut, wenn ich die App in einem anderen Browser als dem Internet Explorer ausführe - ich habe Firefox, Safari und Chrome ausprobiert. Aber wenn ich die App in IE starte (versucht 6 und 8) und es versucht, den Soundclip zu laden, bekomme ich:
%E6%97%A5%E6%9C%AC%E8%AA%9E.jpg
, und die URL wurde zu etwas wie:
Error #2044: Unhandled ioError
Irgendwelche Gedanken, wie Sie das beheben können? Dies ist nur ein Test für die Flash-App mit lokalen Dateisystem-URLs.
Ich habe auch bemerkt, dass der Internet Explorer keine Datei wie folgt finden kann:
æ¥æ¬èª.jpg
, obwohl Chrome / Firefox es entschlüsseln und für eine Datei mit dem Pfad
file:///C:/%E6%97%A5%E6%9C%AC%E8%AA%9E.jpg
Bearbeiten
Ich denke, mein Problem ist das gleiche wie das im folgenden ActionScript-Codefragment:
%Vor% Die Verwendung der Zeichenfolge C:\日本語.jpg
funktioniert im IE, während die Verwendung der Zeichenfolge 日本語.jpg
in anderen Browsern funktioniert. Was ich brauche, ist ein einzelnes Formular, das in allen Browsern funktioniert. Ich habe versucht, die %E6%97%A5%E6%9C%AC%E8%AA%9E.jpg
Codierung und die HTTP-Anfrage-Header auf %u
ohne Glück in entweder Prozent-Escape oder Unescaped-Formular.
Tut mir leid, keine Lösung, aber vielleicht ein paar mehr Informationen darüber, was hier vor sich geht. (Wahrscheinlich haben Sie schon so viel herausgefunden, aber vielleicht hilft es einem anderen Leser, eine Lösung zu finden.) Die "offizielle" URL-Kodierungsspezifikation scheint die Tür weit offen zu lassen, wie entgangene URLs wie die, die Sie erzeugen, entschlüsselt werden - Sind die Escape-Entities UTF-8-Zeichen (wie Firefox usw. interpretiert) oder ASCII-Zeichen (wie IE sie interpretiert) darzustellen? Ich kenne keine Möglichkeit, die beabsichtigte Entschlüsselungsstrategie zu erzwingen.
Nur eine Frage: was Schlimmes passiert, wenn Sie ihnen überhaupt nicht entkommen, aber den Unicode in der URL lassen? Obwohl ich nicht viel Erfahrung damit habe, dachte ich, ich erinnere mich, irgendwo gelesen zu haben, dass die Tage, in denen wir Unicode in URLs entkommen mussten, hinter uns liegen. Da könnte man falsch liegen ...
IE verwendet UTF-8 für HTTP-URLs, aber ich bin mir nicht sicher über Datei-URLs (obwohl ich das Verhalten vor etwa 10 Jahren als Teil des IE-Teams getestet habe). Wenn Sie die URLs in HTML verwenden, empfehle ich String-Literale (wenn Ihre Seitencodierung UTF-8 ist) oder numerische Zeichenreferenzen (& amp; #dddd;). IE konvertiert die Zeichen im Allgemeinen in eine geeignete Kodierung, die UTF-8 für das HTTP-Zeug und UTF-16 für lokale Dateisystem-Interaktionen wäre.
Es ist eigentlich HTTP, das den URL-Escaping benötigt, nicht den HTML-Parser.
Versuchen Sie, nur die Teile des URIs zu codieren, die zu einer falschen Syntaxanalyse führen würden. Zum Beispiel kodieren & amp;, & bull; und Leerzeichen. Lass alles andere wie es ist, und es sollte wie ein Zauber wirken.
Wenn Sie immer noch auf Probleme stoßen, müssen Sie möglicherweise den Inhaltstyp in Ihren http-Headern auf utf setzen. So etwas wie Inhaltstyp: text / html; charset = UTF-8.
Nach dem, was ich getestet habe, ist mir aufgefallen, dass IE keine verschlüsselten Datei-URLs behandelt, aber es behandelt normale http-URLs, daher könnte das Problem sein. Ich bin mir nicht sicher, wie Sie sie laden, aber Sie sollten dieses Problem überprüfen.
Tags und Links internet-explorer escaping url unicode encode