web-dev-qa-db-ja.com

UTF-8文字列からの制御文字の削除

this の質問が見つかりましたが、有効なutf-8文字もすべて削除されます(有効なutf-8文字と制御文字がありますが、空白の文字列が返されます)。 utf-8について読んだように、control charactersには特定の範囲はなく、各文字セットには独自のcontrol charactersがあります。

control charactersのみを削除するように 上記 ソリューションを変更するにはどうすればよいですか?

14
Xaqron

私は次のコードがあなたのために働くと思います:

public static string RemoveControlCharacters(string inString)
{
    if (inString == null) return null;
    StringBuilder newString = new StringBuilder();
    char ch;
    for (int i = 0; i < inString.Length; i++)
    {
        ch = inString[i];
        if (!char.IsControl(ch))
        {
            newString.Append(ch);
        }
    }
    return newString.ToString();
}
19
Centro

これは私が転がる方法です:

Regex.Replace(evilWeirdoText, @"[\u0000-\u001F]", string.Empty)

これにより、最初の31個の制御文字がすべて削除されます。\u001Fから上の次の16進値は、\ u0020AKAスペースです。スペースの前のすべてはすべて改行であり、意味がありません。

キャラクターについて私を信じるには: http://donsnotes.com/tech/charsets/ascii.html

19

文字列をクエリ文字列として使用する場合は、送信する前にUri.EscapeUriString()またはUri.EscapeDataString()の使用を検討する必要があります。注:最初にchar.IsControl()から何かを引き出す必要があるかもしれませんか?

0
Plater