Internet explorer 如何在Javascript中使用重音字符对URL进行编码?

Internet explorer 如何在Javascript中使用重音字符对URL进行编码?,internet-explorer,url,encoding,Internet Explorer,Url,Encoding,我对IE的URL有一个奇怪的问题,如果我在URL中传递场景,它将不起作用,而且它似乎可以完美地用于其他浏览器 在IE中,URL显示为: …/search.aspx?关键字=sc%c3%83%c2%a9nario 在FireFox中,URL显示为: …/search.aspx?关键字=sc%C3%A9nario 在IE中,URL中断,Firefox工作正常,我是否需要在IE中进行URL解码来处理此问题?虽然您没有说明如何“传递”字符串,但我可以告诉您发生了什么 字符é具有代码点E9。在UTF-8中

我对IE的URL有一个奇怪的问题,如果我在URL中传递场景,它将不起作用,而且它似乎可以完美地用于其他浏览器

在IE中,URL显示为:

…/search.aspx?关键字=sc%c3%83%c2%a9nario

在FireFox中,URL显示为:

…/search.aspx?关键字=sc%C3%A9nario


在IE中,URL中断,Firefox工作正常,我是否需要在IE中进行URL解码来处理此问题?

虽然您没有说明如何“传递”字符串,但我可以告诉您发生了什么

字符
é
具有代码点E9。在UTF-8中,这被编码为两个字节:C3 A9。因此,在URL中显示“scénario”的正确方法是

sc%C3%A9nario
现在,如果您获取这个字符串,查看每个字节并假设它们是字符,然后再次进行UTF-8编码,会发生什么?将会发生的是

  • s->s
  • c->c
  • %C3将被解释为具有代码点C3的字符,即Ã,在UTF-8中为C3 83
  • %A9将被解释为带有代码点A9的字符,即©在UTF-8中为C2 A9
  • n->n
  • 等等
这与你在IE中看到的完全一致

现在我不能确定这是怎么发生的,因为这个问题没有足够的背景,但很清楚的是,字符串“scénario”被编码成一个UTF-8字节的字符串,然后根据第一次编码在Windows-1252或Latin-1编码中产生一个字符串的奇怪假设再次被编码


您需要了解字符串是如何“编码两次”的。

如何在URL中传递它?