9

asp.net C# で多言語アプリケーションを使用しています。ここでは、zip ファイルを作成し、データベースのいくつかの項目を使用してファイル名を作成する必要があります。ファイル名から特殊文字を取り除きます。ただし、たとえば言語がドイツ語の場合、トリミング アルゴリズムはウムラウトなどのドイツ語の文字を削除します。

誰かが言語に適応可能なトリミングアルゴリズムを私に提供してくれませんか?

これが私のコードです:

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();
}

ありがとう

4

4 に答える 4

5
string s = "abcöü*/";
var newstr = new String( s.Where(Char.IsLetterOrDigit).ToArray() );
于 2012-07-14T13:57:11.667 に答える
5

ZIP ファイル内の名前ではなく、ZIP ファイルの名前を意味していると仮定すると、その文字がファイル名として有効かどうかを確認したいと思うでしょう。これにより、文字や数字以上のものを使用できるようになります。

char[] invalid = System.IO.Path.GetInvalidFileNameChars();

string s = "abcöü*/";
var newstr = new String(s.Where(c => !invalid.Contains(c)).ToArray()); 
于 2012-07-14T20:45:39.987 に答える
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());
}

これにより、テキストの大部分を保持しながら、最も問題のある文字が削除されます。(ファイル名を作成している場合は、改行とタブをスペース文字に置き換えることもできます。)

于 2012-07-14T20:56:35.483 に答える
1

ワンライナー、印刷不可能なASCIIが本質的にスペースの前のすべての文字であると仮定します:

var safeString = new string(str.Select(c=>c<' '?'_':c).ToArray());
于 2013-02-15T14:01:17.323 に答える