您可以隨時創建自己的解析器。我使用的是:
`var ANSI =(Encoding)Encoding.GetEncoding(1252).Clone();
ANSI.EncoderFallback = new EncoderReplacementFallback(string.Empty);`
這樣做的第一個行創建的Win-1252編碼的克隆(我處理與Win-1252工程數據庫,你可能想使用UTF-8或ASCII)。第二行 - 解析字符時 - 如果沒有與原始字符相同的結果,則返回空字符串。
在此之後,您最好過濾掉所有命令字符(根據您的需要,不包括製表符,空格,換行符和回車符)。
下面是我的個人編碼解析器,我設置了它來糾正數據進入我們的數據庫。
private string RetainOnlyPrintableCharacters(char c)
{
//even if the character comes from a different codepage altogether,
//if the character exists in 1252 it will be returned in 1252 format.
var ansiBytes = _ansiEncoding.GetBytes(new char[] {c});
if (ansiBytes.Any())
{
if (ansiBytes.First().In(_printableCharacters))
{
return _ansiEncoding.GetString(ansiBytes);
}
}
return string.Empty;
}
_ansiEncoding來自var ANSI =(Encoding)Encoding.GetEncoding(1252).Clone();設置故障預置值
如果ansiBytes不爲空,則意味着有一個編碼可用於傳入的特定字符,因此將它與所有可打印字符的列表進行比較,如果它存在 - 它是一個可接受的人物如此返回。
之前我在創建編寫器時嘗試過使用reader.CurrentEncoding,但那不起作用。現在我將輸入文件保存爲UTF8格式,並且使用Encoding.UTF8代替讀寫器,這似乎毫無問題地工作。謝謝! –