C# 使用非法字符将web文件保存到磁盘时的编码

C# 使用非法字符将web文件保存到磁盘时的编码,c#,file-io,C#,File Io,我正在从网上下载一个文件并将其保存在磁盘上。这很简单,但有些web文件中包含在磁盘上保存文件时不允许使用的字符。最值得注意的是,我下载了一个文件,比如script.js?something=somethingelse 我已经找到了关于删除非法字符的帖子,但我不想这么做。我想以某种方式对文件名进行编码,这样当我从磁盘加载文件时,我就可以对其进行解码,然后重新获得原始名称 我找到了一个页面,上面描述了哪些字符是不允许的,但正如上面提到的,它有点模糊 目标文件系统不允许的任何其他字符 到目前为止,我想

我正在从网上下载一个文件并将其保存在磁盘上。这很简单,但有些web文件中包含在磁盘上保存文件时不允许使用的字符。最值得注意的是,我下载了一个文件,比如script.js?something=somethingelse

我已经找到了关于删除非法字符的帖子,但我不想这么做。我想以某种方式对文件名进行编码,这样当我从磁盘加载文件时,我就可以对其进行解码,然后重新获得原始名称

我找到了一个页面,上面描述了哪些字符是不允许的,但正如上面提到的,它有点模糊

目标文件系统不允许的任何其他字符

到目前为止,我想到的是使用
HttpUtility.UrlEncode
,它似乎工作正常。我担心它不“正确”,在某些情况下会失败。那么有人知道实现这一目标的“正确”方法吗?

对于大多数目的来说已经足够好了。您还有和,它的优点是不需要引用System.Web程序集(例如,不是compact framework的一部分),但它仅在.Net 4.5中可用


但是,如果你关心安全性,考虑反XSS,这是其中的一部分。If涵盖了更多的情况,例如转义数据以包含在javascript字符串中,以及白名单支持。

文件名为“script.js”。问号和其他标记不是文件名的一部分。我理解这一点,但我希望完全按照请求的方式保存文件,以便下次有人请求完全相同的文件时我可以再次识别它-我可能还希望支持php之类的文件,这会根据查询字符串更改其内容。当您说UrlEncode已经足够好了,这是否意味着您知道它涵盖了所有可能的场景,否则在保存到磁盘时可能会被视为非法字符?@NielsBrinch如果您所做的只是编码URL,那应该没问题。然而,如果你正在做大量的HTML工作,你很少只需要URL编码。如果我不清楚,很抱歉。为了澄清:我对URL文件名进行编码(在最后一个斜杠之后)并将其保存在磁盘上,文件系统中不允许使用“?”等字符。。。