使用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字符序列,否则不得在主机上使用百分比编码。
5条答案
按热度按时间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?x7yiwoj42#
关于这个,jrieken有什么评论吗?我使用toString()方法得到了这个URI。
你总是可以使用
toString(true)
来跳过编码。不确定LSP如何处理这个问题,因为它只是一个字符串——所以理论上你可以对它们进行编码和/或解码。由于规范禁止在主机部分使用这些百分比编码,我们是否应该正确处理这个问题?
"应该"是的,但"可能"也可以。URI实现中有一些众所周知的缺陷,一般来说,它的字符串形式与其他实现的互操作性不太好。我们主要保证
parse(uri.toString())
保留了身份,但这基本上就是全部了。kcwpcxri3#
但是使用
toString(true)
跳过所有编码,我认为这甚至值得一试。tsm1rwdh4#
是的,它跳过所有编码,除了那些绝对必要的编码 - 即路径中的
#
和?
以及查询中的#
。wvt8vs2t5#
主机部分仍需要支持UTF-8编码。