我正在尝试在我正在处理的几个网址中对非ascii字符进行URL转义(百分比编码)。我正在使用一个Flash应用程序来加载来自这些URL的图像和声音片段等资源。由于文件名可以包含非ascii字符,如下所示:
日本語.jpg
我通过utf-8编码字符来逃避它们,然后以百分比形式转义unicode字节,以获得以下内容:
%E6%97%A5%E6%9C%AC%E8%AA%9E.jpg
当我在Internet Explorer以外的任何浏览器中运行应用程序时,这些文件名工作正常 - 我尝试过Firefox,Safari和Chrome。但是,当我在IE中启动应用程序(尝试6和8)并尝试加载声音片段时,我得到:
Error #2044: Unhandled ioError
,网址已损坏为:
æ¥æ¬èª.jpg
有关如何解决此问题的任何想法?这只是用本地文件系统URL测试驱动Flash应用程序。
我还注意到Internet Explorer无法找到如下文件:
file:///C:/%E6%97%A5%E6%9C%AC%E8%AA%9E.jpg
,虽然Chrome / Firefox会对其进行解码并为路径
C:\日本語.jpg
修改的
我认为我的问题与以下ActionScript代码片段中遇到的问题相同:
import flash.display.Loader;
import flash.net.URLRequest;
...
var ldr:Loader;
var req:URLRequest = new URLRequest("日本語.jpg");
ldr = new Loader();
ldr.load(req);
使用字符串日本語.jpg
可以在IE中使用,而使用字符串%E6%97%A5%E6%9C%AC%E8%AA%9E.jpg
可以在其他浏览器中使用。我需要的是一个适用于所有浏览器的单一表单。我尝试了%u
编码,并将http请求标头设置为Content-Type: text/html; charset=utf-8
,但在转义百分比或非转义形式时都没有运气。
答案 0 :(得分:1)
抱歉,没有解决方案,但可能至少还有一些关于这里可能会发生什么的更多信息。 (可能你已经解决了这个问题,但也许它会帮助其他读者找到解决方案。)“官方”网址编码规范似乎对如何解码转发的网址(例如您正在生成的网址)敞开大门 - 是否用于表示UTF-8字符的转义实体(因为Firefox等正在解释它们)或ASCII字符(因为IE正在解释它们)?我不知道有什么方法可以强制执行预期的解码策略。
只是一个问题:如果你根本不逃避它们会发生什么坏事,但是将unicode留在网址中?虽然我没有很多经验,但我想我记得在某处读到需要在网址中逃脱unicode的日子已经过去了。可能是错的......
答案 1 :(得分:1)
IE对HTTP Urls使用UTF-8,但我不确定文件URL(尽管我在大约10年前测试了这个行为是IE团队的一部分)。如果您在HTML中使用URLS,我实际上建议尝试使用字符串文字(如果您的页面编码是UTF-8)或数字字符引用(& #dddd;)。 IE通常会将字符转换为适当的编码,对于HTTP内容将是UTF-8,对于本地文件系统交互则是UTF-16。
实际上,HTTP需要URL转义,而不是HTML解析器。
答案 2 :(得分:1)
尝试仅编码会导致错误解析的URI部分。例如,编码&,?和空格。保留其他所有内容,它应该像魅力一样。
如果您仍遇到问题,可能需要在http标头中将content-type设置为utf。像Content-type:text / html;字符集= UTF-8。
答案 3 :(得分:1)
为什么不使用Unicode转义序列?将其粘贴到HTML网页的正文中以查看我的意思:
<script type="text/javascript">
var fileName = "日本語.jpg";
document.write(escape(fileName));
</script>
我得到%u65E5%u672C%u8A9E.jpg。
答案 4 :(得分:1)
根据我的测试,我注意到IE不会处理编码的文件URL,但它会处理正常的http URL,因此可能会出现问题。我不确定你是如何装载它们的,但你应该检查一下这个问题。
答案 5 :(得分:1)
file:// protocol取决于您的操作系统区域设置,如果您的系统设置未设置为中文而是英文,则不能让IE执行此操作。