Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Internet explorer 用于Internet Explorer的转义中文/日文Unicode字符的URL_Internet Explorer_Url_Unicode_Escaping_Encode - Fatal编程技术网

Internet explorer 用于Internet Explorer的转义中文/日文Unicode字符的URL

Internet explorer 用于Internet Explorer的转义中文/日文Unicode字符的URL,internet-explorer,url,unicode,escaping,encode,Internet Explorer,Url,Unicode,Escaping,Encode,我正在尝试在我正在处理的几个URL中转义(百分比编码)非ascii字符。我正在使用一个flash应用程序,它可以从这些URL加载图像和声音片段等资源。由于文件名可以包含非ascii字符,如下所示: 日本語.jpg 我通过对字符进行utf-8编码,然后对unicode字节进行百分比转义,以获得以下结果: %E6%97%A5%E6%9C%AC%E8%AA%9E.jpg 当我在Internet Explorer以外的任何浏览器中运行应用程序时,这些文件名都可以正常工作——我已经尝试过Firefox、S

我正在尝试在我正在处理的几个URL中转义(百分比编码)非ascii字符。我正在使用一个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)并尝试加载声音片段时,我得到:
错误#2044:未处理的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请求头设置为
内容类型:text/html;charset=utf-8
在百分比转义或未转义形式中都没有运气。

对不起,没有解决方案,但可能至少有一些关于这里可能发生的情况的更多信息。(可能您已经了解了这一点,但可能会帮助其他读者找到解决方案。)“官方”url编码规范似乎为如何解码转义url(如您正在生成的url)敞开了大门——转义实体是否打算表示UTF-8字符(因为Firefox等正在解释它们)或ASCII字符(因为IE正在解释它们)?我不知道有什么方法可以强制执行预期的解码策略


只是一个问题:如果你根本不转义,而是在url中保留unicode,那会发生什么坏事呢?虽然我对它没有太多经验,但我记得在某个地方读到过,需要在url中转义unicode的日子已经过去了。这可能是错的…

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


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

请尝试只对URI中可能导致其解析错误的部分进行编码。例如,对&、?、和空格进行编码。其他内容保持原样,它应该可以像一个符咒一样工作


如果您仍然遇到问题,您可能需要在http标头中将内容类型设置为utf。类似内容类型:text/html;charset=utf-8。

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

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

变量文件名=”日本語.jpg”;
document.write(转义(文件名));

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

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

如果您的系统设置未设置为“chin”,则文件://协议取决于您的操作系统区域设置ese但是英语,你不能让IE这么做。

Windows使用UTF-16作为文件名。所以试试
%65%E5%67%2C%8A%9E
。UTF-16名称没有骰子,IE仍然找不到它。相关:大多数浏览器似乎都可以使用包含unicode字符的URL。不过,我正在构建一个Flex应用程序,我的URL是指向外部资源(如声音片段)的链接,图像,电影等。当我在flash插件中运行编译后的.swf时,这些资源仅在unicode字符为url/转义UTF-8的情况下加载。否则它们将无法加载。这些转义百分比文件名在除Internet Explorer之外的所有浏览器中都可以正常工作。URI/url(RFC 3986)需要对非ASCII字符进行编码。IRI(RFC 3987)另一方面,允许大多数Unicode字符未编码。IRI是取代旧URI/URL标准的新标准,但许多系统尚未实现IRI。IRI规范提供了将IRI转换为URI/URL的规则,反之亦然。不幸的是,这些规则对我不起作用。这是转义URL的标准方法吗?Firefox无法加载以下表单的URL:
file:///.../%u3400.jpg
,用于名为
㐀.jpg
在给定的路径上。对不起,我想这只适用于JavaScript escape/unescape。我尝试了你的编码,它适用于我的本地主机。正如前面提到的,你可能需要告诉服务器你正在发送头中的UTF-8。如果你的主机页有一个编码元标记,这应该可以让服务器相信你在说UTF-8。我会的想想看。也许吧。不幸的是,我正在使用的框架-Flex-不能很好地处理未转义的非ascii字符。我需要找到解决这个问题的正确方法。我将在Flex框架中进行深入研究,看看是否有可能访问HTTP头,但我希望有一个更高级别的解决方案。结果是他提出了这个问题。