9

我正在尝试在我正在处理的几个 URL 中对非 ascii 字符进行 URL 转义(百分比编码)。我正在使用从这些 URL 加载图像和声音剪辑等资源的 Flash 应用程序。由于文件名可以包含非 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,并且 URL 已损坏为:

æ¥æ¬èª.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为百分比转义或非转义形式都没有运气。

4

6 回答 6

1

file:// 协议取决于你的操作系统区域设置,如果你的系统设置没有设置为中文而是英文,你不能让 IE 这样做。

于 2009-12-07T02:19:59.567 回答
1

为什么不只使用 Unicode 转义序列?将其粘贴到 HTML 网页的正文中以了解我的意思:

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

我得到 %u65E5%u672C%u8A9E.jpg。

于 2009-11-30T21:23:29.173 回答
1

IE 对 HTTP Urls 使用 UTF-8,但我不确定文件 URL(尽管我在大约 10 年前作为 IE 团队的一员测试了这种行为)。如果您在 HTML 中使用 URL,我实际上建议您尝试字符串文字(如果您的页面编码是 UTF-8)或数字字符引用 (&#dddd;)。IE 通常会将字符转换为适当的编码,对于 HTTP 内容是 UTF-8,对于本地文件系统交互是 UTF-16。

实际上是 HTTP 需要 URL 转义,而不是 HTML 解析器。

于 2009-11-27T21:35:05.373 回答
1

根据我的测试,我注意到 IE 不处理编码文件 URL,但它确实处理正常的 http URL,所以这可能是问题所在。我不确定你是如何加载它们的,但你应该检查一下这个问题。

于 2009-12-02T10:00:54.160 回答
1

尝试仅对 URI 中可能导致解析不正确的部分进行编码。例如,编码 &、? 和空格。让其他一切保持原样,它应该像魅力一样工作。

如果您仍然遇到问题,您可能需要在 http 标头中将 content-type 设置为 utf。类似于 Content-type: text/html; 字符集=UTF-8。

于 2009-11-29T06:51:15.053 回答
1

抱歉,没有解决方案,但也许至少有一些关于这里可能发生的事情的更多信息。(可能你已经明白了这一点,但也许它会帮助其他读者找到解决方案。)“官方”url 编码规范似乎为如何解码转义的 url 敞开大门,就像你正在生成的那样--转义实体是用来表示 UTF-8 字符(如 Firefox 等正在解释它们)还是 ASCII 字符(如 IE 正在解释它们)?我不知道有什么方法可以强制使用预期的解码策略。

只是一个问题:如果您根本不逃避它们,而是将 unicode 留在 url 中,会发生什么坏事?虽然我没有很多经验,但我想我记得在某处读到需要在 url 中转义 unicode 的日子已经过去了。那可能是错的...

于 2009-11-25T13:53:26.200 回答