在从字符串中删除未知错误字符时遇到一些问题。它只显示为一个框(表示我选择的字体中不可显示的字符)。
我尝试了多种删除方法,最成功的方法是使用正则表达式删除任何不允许的字符。那很有效。问题是,有许多允许的角色,基本上是任何东西,并且考虑到这将会看到广泛的输入,我可能无法解释所有这些。此外,性能需要快速(它基本上是一个滚动的控制台窗口。)
有没有其他方法来格式化字符串以删除这些不可替代的字符?
我使用WPF文本框显示文本,使用VB.net作为后端代码。
编辑:忘记添加带有特殊字符的字符串无法从文本框复制到剪贴板。所以我不能把它放在另一个程序中,并确定它是什么字符。
此处示例:
答案 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]并使用正则表达式替换所有匹配的值替换为空字符串。我减少了范围,直到我找到了正确的字符并仅替换它。
我鼓励有类似问题的人考虑使用正则表达式来匹配一组字符串。