我有一个应用程序,它向VB论坛软件发送POST请求,并让某人登录(不设置cookie或任何东西).

用户登录后,我创建了一个变量,用于在他们的本地计算机上创建路径.

c:\tempfolder\date\username

问题是一些用户名抛出了"非法字符"异常.例如,如果我的用户名是mas|fenix,它会抛出一个异常..

Path.Combine( _      
  Environment.GetFolderPath(System.Environment.SpecialFolder.CommonApplicationData), _
  DateTime.Now.ToString("ddMMyyhhmm") + "-" + form1.username)

我不想将其从字符串中删除,但会通过服务器上的FTP创建一个包含其用户名的文件夹.这就引出了我的第二个问题.如果我在服务器上创建文件夹,我可以将"非法字符"留在文件夹中吗?我之所以问这个问题,是因为服务器是基于Linux的,我不确定Linux是否接受它.

EDIT: It seems that URL encode is NOT what I want.. Here's what I want to do:

old username = mas|fenix
new username = mas%xxfenix

其中%xx是ASCII值或任何其他易于识别字符的值.

推荐答案

Edit: Note that this answer is now out of date. See 100 for a better fix

UrlEncoding将执行您在此处建议的操作.在C#中,您只需使用HttpUtility,如前所述.

您也可以对非法字符进行正则化,然后进行替换,但这会变得更加复杂,因为您必须使用某种形式的状态机(例如switch…case)来替换为正确的字符.既然UrlEncode能提前做到这一点,那就相当容易了.

至于Linux和Windows,Linux中有一些在Windows中不能接受的字符,但我不会担心这一点,因为文件夹名称可以通过解码URL字符串(使用UrlDecode)返回,所以您可以往返更改.

.net相关问答推荐

如何按需计算一个值并将该值缓存在FP/F#中?

System.IO.Directory.Exists 在 LINQ 语句中失败,但在 foreach 循环中没有

为什么 GetShortestDayName 返回的名称比预期的短?

防止在 .NET 上构建路径中的反斜杠以进行跨平台部署

如何为多种文件类型设置 FileSystemWatcher 过滤器?

将 Moq 模拟对象传递给构造函数

如何从标头中检索基本身份验证凭据?

IIS Express - 500.19 无法读取配置文件 - 因为它正在查看错误的路径

app.config 文件和 XYZ.settings 文件有什么区别?

RNGCryptoServiceProvider 的优缺点

C# 有办法给我一个不可变的字典吗?

为什么要判断这个!= null?

是否有用于 Windows / C# 开发的可嵌入 Webkit 组件?

如何正确停止BackgroundWorker

互锁且易变

Visual Studio 2017 和 2019 突出显示滚动条中所选单词的出现

如何使用 DateTime 指定一天中的最晚时间

ADO.NET Entity Framework:更新向导不会添加表

C# ListView 列宽自动

如何在我的机器上找到 fuslogvw.exe?