2014-08-27 99 views
1

有一些問題從字符串中刪除未知的錯誤字符。它顯示爲一個盒子(表示我選擇的字體中不可顯示的字符)。在VB.NET中從輸入字符串中刪除未知的錯誤字符

我已經嘗試了多種方式刪除它,最成功的是使用正則表達式來刪除任何不是允許的字符。這工作。問題是有許多允許的字符,基本上是任何東西,並且考慮到將會看到的廣泛的輸入,我可能無法解釋所有這些字符。此外,性能需要迅速(其基本上是一個滾動控制檯窗口)。

是否有任何其他方式來格式化字符串以刪除這些不可溶字符?

我正在使用WPF文本框來顯示文本,VB.net作爲後端代碼。

編輯:忘了補充說,具有特殊字符的字符串不能從文本框複製到剪貼板。所以我不能把它放在另一個程序中,並確定它是什麼字符。

這裏舉例:

+1

這些壞字是怎麼進入的?什麼使它成爲「壞人物」? – RBarryYoung 2014-08-27 15:56:05

+0

錯誤的字符被提供數據的設備添加。我無法控制來自它的格式。是什麼讓他們變壞是因爲我的字體無法顯示它們,因此它們顯示爲佔位符或空格,並且無法複製到剪貼板。 – 2014-08-27 15:57:39

+0

你可以在你的代碼中識別這些字符,以找出它們是什麼。 '對於每個c作爲MyString中的字符...' – 2014-08-27 15:59:49

回答

0

原來我的問題是在我的琴絃ASCII(0)空字符。我遇到的麻煩是「ASC」功能似乎不想打印它們。我設法使用像下面的[\ x00- \ x07]正則表達式來跟蹤它們,並使用正則表達式replace來替換所有匹配的值爲空字符串。我減少了範圍,直到我找到了正確的字符並僅替換了該字符。

我鼓勵任何有類似問題的人考慮使用正則表達式來匹配一組字符串。

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