URL为Internet Explorer转义中文/日文Unicode字符

时间:2009-11-25 04:29:50

标签: internet-explorer url unicode escaping encode

我正在尝试在我正在处理的几个网址中对非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,但在转义百分比或非转义形式时都没有运气。

6 个答案:

答案 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执行此操作。