从VB.NET中的输入字符串中删除未知的坏字符

时间:2014-08-27 15:49:47

标签: wpf vb.net string xaml formatting

在从字符串中删除未知错误字符时遇到一些问题。它只显示为一个框(表示我选择的字体中不可显示的字符)。

我尝试了多种删除方法,最成功的方法是使用正则表达式删除任何不允许的字符。那很有效。问题是,有许多允许的角色,基本上是任何东西,并且考虑到这将会看到广泛的输入,我可能无法解释所有这些。此外,性能需要快速(它基本上是一个滚动的控制台窗口。)

有没有其他方法来格式化字符串以删除这些不可替代的字符?

我使用WPF文本框显示文本,使用VB.net作为后端代码。

编辑:忘记添加带有特殊字符的字符串无法从文本框复制到剪贴板。所以我不能把它放在另一个程序中,并确定它是什么字符。

此处示例:

2 个答案:

答案 0 :(得分:1)

以下正则表达式会将字符串清除为严格的ASCII字符集。

string plainText = Clipboard.GetText(TextDataFormat.Text);

// Allow ASCII base - https://en.wikipedia.org/wiki/Basic_Latin_(Unicode_block)  for readability below or equivalently    https://en.wikipedia.org/wiki/ASCII

//non-printable characters range (\u0000-\u001F)

//remove "bad" non-printable control characters except Horizontal Tab, Line Feed, Carriage Return
//\uxxxx is unicode for the character, make 1st link easily translated. 

ascciiText = Regex.Replace(plainText, @"[\u0000-\u0008|\u000B-\u000C|\u000E-\u001F|\u0080-\u009F]", string.Empty);

//remove everything outside strict ASCII only range and delete control character (U+007F) \u007F which is Deleted character

asciiText = Regex.Replace(plainText, @"[^\u0000-\u007E]", string.Empty);

答案 1 :(得分:0)

原来我的问题是我的字符串中的Ascii(0)空字符。我遇到的麻烦是“ASC”功能似乎根本不想打印它们。我设法使用正则表达式跟踪它们,如下面的[\ x00- \ x07]并使用正则表达式替换所有匹配的值替换为空字符串。我减少了范围,直到我找到了正确的字符并仅替换它。

我鼓励有类似问题的人考虑使用正则表达式来匹配一组字符串。