我在asp.net C#中有一个多语言应用程序。在这里,我必须创建一个zip文件,并使用数据库中的一些项来构造文件名。我从文件名中删除了特殊字符。但是,如果语言是德语,我的修剪算法将删除一些德语字符,如Umlaut。
有人可以为我提供适应语言的修剪算法。
这是我的代码:
private string RemoveSpecialCharacters(string str)
{
return str;
StringBuilder sb = new StringBuilder();
foreach (char c in str)
{
if ((c >= '0' && c <= '9') || (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') | c == '.' || c == '_' || c == ' ' || c == '+')
{
sb.Append(c);
}
}
return sb.ToString();
}
感谢
答案 0 :(得分:5)
string s = "abcöü*/";
var newstr = new String( s.Where(Char.IsLetterOrDigit).ToArray() );
答案 1 :(得分:5)
假设您的意思是ZIP文件的名称,而不是ZIP文件中的名称,您可能想要检查该字符是否对文件名有效,这将允许您使用的不仅仅是字母或数字:< / p>
char[] invalid = System.IO.Path.GetInvalidFileNameChars();
string s = "abcöü*/";
var newstr = new String(s.Where(c => !invalid.Contains(c)).ToArray());
答案 2 :(得分:4)
一个更通用的变体会减少字符串:
public static string RemoveDiacritics(this string s)
{
// split accented characters into surrogate pairs
IEnumerable<char> chars = s.Normalize(NormalizationForm.FormD);
// remove all non-ASCII characters – i.e. the accents
return new string(chars.Where(c => c < 0x7f && !char.IsControl(c)).ToArray());
}
这应该删除大多数有问题的字符,同时仍然保留大部分文本。 (如果您正在创建文件名,则可能还需要使用空格字符替换换行符和制表符。)
答案 3 :(得分:1)
单行,假设ASCII不可打印基本上是空格之前的所有字符:
var safeString = new string(str.Select(c=>c<' '?'_':c).ToArray());