【问题标题】:encoded url: %9A showing up as ?-diamond ... how to get browser to correctly interpret %9A编码的 url: %9A 显示为 ?-diamond ... 如何让浏览器正确解释 %9A
【发布时间】:2012-07-15 13:51:35
【问题描述】:

我正在从 flash 生成一个 url(用于 facebook 对话框):

var lvs_url = "http://www.facebook.com/dialog/feed?app_id=208524139202627&name=š š&caption=&description=&link=http://apps.facebook.com/celjska_puzzle&redirect_uri=http://apps.facebook.com/celjska_puzzle/"
var lvo_req : URLRequest = new URLRequest( lvs_url ) ;
navigateToURL( lvo_req , "_blank" );

但是当 url 进入浏览器时,š 已经变成了 %9A,然后显示为 ?-diamond 在 Facebook 弹出窗口中。

但是,浏览器可以使用 %20

这是编码后的网址:http://www.facebook.com/dialog/feed?app_id=208524139202627&name=%9A%20%9A&caption=&description=&link=http://apps.facebook.com/celjska_puzzle&redirect_uri=http://apps.facebook.com/celjska_puzzle/

【问题讨论】:

  • 0x9A 不是有效的 UTF-8 字节序列。你是如何创建它的?对于š,应该是%C5%A1
  • 它显然是由 flash AS3 创建的 var lvo_req : URLRequest = new URLRequest( lvs_url ) 因为它是一个 š 进入,但是一个%9A 到达浏览器地址栏时

标签: flash browser encoding urlrequest navigatetourl


【解决方案1】:

试试encodeURIComponent:

var lvs_url = "http://www.facebook.com/dialog/feed?app_id=208524139202627&name="+encodeURIComponent("š š")+"&caption=&description=&link=http://apps.facebook.com/celjska_puzzle&redirect_uri=http://apps.facebook.com/celjska_puzzle/";
var lvo_req : URLRequest = new URLRequest( lvs_url ) ;
navigateToURL( lvo_req , "_blank" );

来自 [docs](http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/net/URLRequest.html#URLRequest()) :

创建一个 URLRequest 对象。

如果 System.useCodePagetrue,则使用 系统代码页,而不是 Unicode。

如果System.useCodePagefalse,则请求使用编码 Unicode,而不是系统代码页。

Specification 说:

非ASCII字符必须先按照UTF-8编码 [STD63],然后是对应的 UTF-8 序列的每个八位字节 必须进行百分比编码才能表示为 URI 字符。

这意味着"š" 在url 中必须编码为%C5%A1。尝试将System.useCodePage 设置为false,即使文档不明确,因为使用Unicode 编码 并不一定意味着UTF-8

我还应该提到,如果您在文件中使用"š",您的文件应该以UTF-8 编码保存。

【讨论】:

  • 1 - System.useCodePage = false ...没有帮助 2 - 非 ASCII字符必须首先根据 UTF-8 [STD63] 编码,然后必须对相应 UTF-8 序列的每个八位字节进行百分比编码才能表示为 URI 字符。 ...对不起,但我不知道这是什么意思 3 - 这意味着“š”必须编码为 %C5%A1 ...当我把它放到浏览器地址栏中时工作,但当然我的网址是用各种字符在闪存中动态构建的,所以我不能硬编码。
  • @dsdsdsdsd 你能澄清一下,它有什么改变吗?或者你的意思是它已经是假的了。您是否已将文件保存为 UTF-8?
  • 我的 flash Edit/Preferences/Actionscript/open-import 和 save-export 设置为 utf-8。 ...现在我正在阅读有关 URLRequest.contentType ...
  • @dsdsdsdsd 你的意思是在将System.useCodePage 设置为false 之后你仍然得到%9A 吗?
  • @dsdsdsdsd 我刚发现AS3应该有encodeURIComponent这个函数(和javascript一样),你可以试试
猜你喜欢
  • 2020-12-25
  • 1970-01-01
  • 2014-04-19
  • 1970-01-01
  • 1970-01-01
  • 2013-08-21
  • 2015-04-15
  • 2014-04-27
  • 2013-07-03
相关资源
最近更新 更多