I'm trying to URL-escape (percent-encode) non-ascii characters in several URLs I'm dealing with. I'm working with a flash application that loads resources like images and sound clips from these URLs. Since the filenames can contain non-ascii characters, like so:
日本語.jpg
I escape them by utf-8 encoding the characters, and then percent-escaping the unicode bytes, to get the following:
%E6%97%A5%E6%9C%AC%E8%AA%9E.jpg
These filenames work fine when I run the app in any browser other than Internet Explorer - I've tried Firefox, Safari and Chrome. But when I launch the app in IE (tried both 6 and 8) and it tries to load the sound clip, I get:
Error #2044: Unhandled ioError
, and the URL has been corrupted to something like:
æ¥æ¬èª.jpg
Any thoughts on how to fix this? This is just test-driving the flash app with local filesystem URLs.
I've also noticed that Internet explorer isn't able to locate a file such as:
file:///C:/%E6%97%A5%E6%9C%AC%E8%AA%9E.jpg
, though Chrome / Firefox will decode it and load just fine for a file with the path
C:\日本語.jpg
edit
I think my problem is the same as the one encountered in the following ActionScript code fragment:
import flash.display.Loader;
import flash.net.URLRequest;
...
var ldr:Loader;
var req:URLRequest = new URLRequest("日本語.jpg");
ldr = new Loader();
ldr.load(req);
Using the string 日本語.jpg
will work in IE, while using the string %E6%97%A5%E6%9C%AC%E8%AA%9E.jpg
works in other browsers. What I need is a single form that will work in all browsers. I have tried the %u
encoding and setting the http request header to Content-Type: text/html; charset=utf-8
with no luck in either percent-escaped or unescaped form.