我需要一种强大而简单的方法来从简单的字符串中删除非法路径和文件字符.我使用了下面的代码,但它似乎没有做任何事情,我错过了什么?
using System;
using System.IO;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string illegal = "\"M<>\"\\a/ry/ h**ad:>> a\\/:*?\"<>| li*tt|le|| la\"mb.?";
illegal = illegal.Trim(Path.GetInvalidFileNameChars());
illegal = illegal.Trim(Path.GetInvalidPathChars());
Console.WriteLine(illegal);
Console.ReadLine();
}
}
}
Run Code Online (Sandbox Code Playgroud) 我有几个文件夹,一些文件夹的名称中包含非拉丁符号(在我的情况下是俄语).此文件夹在"D:\ test.zip"中发送到zip存档(由Windows资源管理器).然后我执行方法
ZipFile.ExtractToDirectory(@"D:\test.zip", @"D:\result");
Run Code Online (Sandbox Code Playgroud)
它成功地解压缩了所有内容,但所有非拉丁符号都变成了错误.
例如,我得到"D:\ result \ЄбЄ¤л\ file.txt"而不是"D:\ result\каскады\ file.txt".
我的系统的默认编码是windows-1251,我通过参与Encoding.GetEncoding("windows-1251")
第三个参数ExtractToDirectory
并得到相同的结果来验证.我也尝试过UTF-8,但在路径中有另外的文物("D:\ result\ ᪠ \file.txt").尝试使用Unicode返回有关不支持编码的消息.
当我通过执行方法通过代码创建相同的存档时
ZipFile.CreateFromDirectory(@"D:\zipdata", @"D:\test.zip");
Run Code Online (Sandbox Code Playgroud)
然后,即使没有指定特定的编码,也可以使用与问题顶部相同的代码行解压缩.
问题是:如何从归档中获取正确的编码以便在ExtractToDirectory
方法中应用它,因为在实际任务归档中来自外部源并且我不能依赖于它"通过手"或编程创建的位置?
编辑
有问题,非拉丁符号(中文)也会导致问题,但这个事实就像解决问题一样,而这对我的情况来说确实是个问题.