vscode URI由didOpen提供并不符合RFC3986,

roejwanj  于 4个月前  发布在  Vscode
关注(0)|答案(5)|浏览(42)

使用ssh-remote vscode扩展在远程Linux主机上以code -r bar.ttcn3打开一个新文件,didOpen通知的参数如下:

[Trace - 10:12:35 AM] Sending notification 'textDocument/didOpen'.
Params: {
    "textDocument": {
        "uri": "untitled://ssh-remote%2B192.168.1.10/home/moosq/examples/bar.ttcn3",
        "languageId": "ttcn3",
        "version": 1,
        "text": ""
    }
}

使用%2B代替+字符不符合RFC3986第20页的规范,因为这种编码仅保留给非ASCII字符:
注册名称语法允许对八位字节进行百分比编码,以便以一种与底层名称解析技术无关的方式统一表示非ASCII注册名称。非ASCII字符必须首先根据UTF-8 [STD63]进行编码,然后每个UTF-8序列的对应八位字节必须进行百分比编码,才能表示为URI字符。URI生成应用程序除非用于表示UTF-8字符序列,否则不得在主机上使用百分比编码

7cwmlq89

7cwmlq891#

@jrieken any comment on this. I get this URI using toString() . Is this something we should handle correctly since the spec forbids these percentage encodings in the host part?

x7yiwoj4

x7yiwoj42#

关于这个,jrieken有什么评论吗?我使用toString()方法得到了这个URI。

你总是可以使用toString(true)来跳过编码。不确定LSP如何处理这个问题,因为它只是一个字符串——所以理论上你可以对它们进行编码和/或解码。

由于规范禁止在主机部分使用这些百分比编码,我们是否应该正确处理这个问题?

"应该"是的,但"可能"也可以。URI实现中有一些众所周知的缺陷,一般来说,它的字符串形式与其他实现的互操作性不太好。我们主要保证parse(uri.toString())保留了身份,但这基本上就是全部了。

kcwpcxri

kcwpcxri3#

但是使用toString(true)跳过所有编码,我认为这甚至值得一试。

tsm1rwdh

tsm1rwdh4#

是的,它跳过所有编码,除了那些绝对必要的编码 - 即路径中的 #? 以及查询中的 #

wvt8vs2t

wvt8vs2t5#

主机部分仍需要支持UTF-8编码。

相关问题