C#中使用Uri处理非ASCII文件名的异常问题
解决Uri构造时的格式异常问题
当你使用含非ASCII字符的文件名直接构造Uri实例时,Uri默认会尝试将其解析为绝对URI,但纯文件名不符合绝对URI的格式规范,因此抛出格式异常。以下是可行的解决方案:
方案1:指定Uri类型为相对路径
使用Uri的重载构造函数,明确指定UriKind.Relative,告知系统这是一个相对路径的文件名:
var myUri = new Uri("سلام.txt", UriKind.Relative);
如果后续需要转换为绝对文件URI,可以结合当前目录构造:
var baseDir = new Uri(Directory.GetCurrentDirectory() + Path.DirectorySeparatorChar); var absoluteUri = new Uri(baseDir, myUri);
方案2:使用文件URI协议前缀
给文件名加上file:///前缀,让Uri识别为文件类型URI,同时确保非ASCII字符被正确处理:
var encodedFileName = Uri.EscapeDataString("سلام.txt"); var myUri = new Uri($"file:///{encodedFileName}");
也可以借助FileInfo自动处理路径编码与格式:
var myUri = new Uri(new FileInfo("سلام.txt").FullName);
注意:Windows系统下文件URI格式通常为
file:///C:/path/文件名.txt,上述方法会自动适配系统路径规范。
内容的提问来源于stack exchange,提问作者Ebrahim Mehri
相关产品推荐
相关产品推荐

