根据RFC 3986,路径组件的有效字符为:
a-z A-Z 0-9 . - _ ~ ! $ & ' ( ) * + , ; = : @
以及百分比编码的字符,当然还有斜杠
/
。但是,我找不到根据上述规则将字符串转换为格式正确的路径的类。
string rawPath = "/A9_(+@*)/# ?/";
string expectedPath = "/A9_(+@*)/%23%20%3f";
但是,请参见下面的代码:
string rawPath = "/A9_(+@*)/# ?/";
Uri.EscapeDataString(rawPath); //Output=>%2FA9_%28%2B%40%2A%29%2F%23%20%3F%2F
Uri.EscapeUriString(rawPath); //Ouput=>/A9_(+@*)/#%20?/
HttpUtility.UrlPathEncode(rawPath); //Ouput=>/A9_(+@*)/#%20?/
我尝试过的所有操作都不会使字符保留转义,并且属性会转义所有其他字符。
希望有人可以省去我编写自己的实用程序的麻烦!
最佳答案
这些中的每一个都基于URI创建中的各种规则提供了预期的编码。这是因为包含保留字符(请参阅RFC 3968的2.2节),其中包括?
和#
是标准定义的分隔符。这些将无法逃脱,因为它们是语言定义的一部分。