自定义URIscheme删除“#标志”前的空格

我正在编写自定义的URIscheme,下面这篇文章:

https://msdn.microsoft.com/en-us/library/aa767914(v=vs.85).aspx

我的处理程序看起来像这样:myScheme:// firstItem / SecondItem

事情是,在第一次斜杠后,如果我写空格的“#”,所有的空间被删除。

例:

myScheme://first/second #third 

被解释为:

 myScheme://first/second#third 

在我的应用程序。

另外,如果这是斜杠前的第一个参数,则会添加一个斜杠:

 myScheme://first #second 

被解释为:

 myScheme://first /#second 

在我的应用程序。

任何人都可以解释这种行为?

==编辑==

mailto:协议是唯一以类似的方式实现的,并且运行良好。 onenote,winamp等…不能处理这些情况。

有谁知道为什么?

通常你使用百分比编码的空格,例如。

  • 在URL中,空格应该使用%20还是+来编码?
  • URL编码空格字符:+或%20?

应用程序注册为URI方案的页面列出了URI中的多个空格问题:

通过将上述设置添加到注册表中,导航到诸如alert:Hello%20World URI将导致尝试在命令行上使用完整的URI启动alert.exe 。 Internet Explorer百分比 – 解码URI,但Windows运行…命令不。 如果URI包含百分比编码的空格,则可能会在命令行上跨多个参数进行拆分。

“分裂”对应于你问题的第二部分。 但后来呢,这个评论呢

当ShellExecute使用命令行中的字符串执行可插入协议处理程序时,URI中的任何非编码空格,引号和反斜杠将被解释为命令行的一部分。 这意味着如果使用C / C ++的argc和argv来确定传递给你的应用程序的参数,那么这个字符串可能会被分成多个参数。 为了减轻这个问题:

最后一部分是建议:

避免 URI中的空格,引号或反斜杠

因为系统的一部分将依靠百分比编码,而另一部分则由它来破坏。