Ответ 1
Для тех, у кого есть эта проблема, и вы ищете решение "исправить все"... Вот как я в конце концов ее исправил:
public static string RemoveTroublesomeCharacters(string inString)
{
if (inString == null)
{
return null;
}
else
{
char ch;
Regex regex = new Regex(@"[^\u0000-\u007F]", RegexOptions.IgnoreCase);
Match charMatch = regex.Match(inString);
for (int i = 0; i < inString.Length; i++)
{
ch = inString[i];
if (char.IsControl(ch))
{
string matchedChar = ch.ToString();
inString = inString.Replace(matchedChar, string.Empty);
}
}
while (charMatch.Success)
{
string matchedChar = charMatch.ToString();
inString = inString.Replace(matchedChar, string.Empty);
charMatch = charMatch.NextMatch();
}
}
return inString;
}
Я разберу его немного более подробно для тех, кто менее опытен:
-
Сначала мы прокручиваем каждый символ всей строки и используем метод IsControl для char, чтобы определить, является ли символ управляющим символом или нет.
-
Если найден управляющий символ, скопируйте соответствующий символ в строку, затем используйте метод Replace, чтобы изменить символ управления на пустую строку. Промойте и повторите для остальной части строки.
-
После того, как мы пропустим всю строку, мы используем определенное регулярное выражение (которое будет соответствовать любому символу, который не является символом управления или стандартным символом ascii) и снова заменяет сопоставленный символ пустой строкой. Выполнение этого цикла while означает, что все время charMatch истинно, символ будет заменен.
-
Наконец, как только все символы удаляются, и мы зациклировали всю строку, мы возвращаем inString.
(Примечание. Мне еще не удалось выяснить, как повторно заполнить TextBox новым измененным значением inString, поэтому, если кто-нибудь может указать, как это можно сделать, это было бы здорово)