いつでも独自のパーサーを作成できます。私が使用するものは次のとおりです。
`var ANSI = (エンコーディング) Encoding.GetEncoding(1252).Clone();
ANSI.EncoderFallback = new EncoderReplacementFallback(string.Empty);`
この最初の行は、Win-1252 エンコーディングのクローンを作成します (私が扱うデータベースは Win-1252 で動作するため、おそらく UTF-8 または ASCII を使用することをお勧めします)。2 行目 (文字を解析するとき) は、元の文字に相当する文字がない場合、空の文字列を返します。
この後、すべてのコマンド文字 (必要に応じて、タブ、スペース、改行、改行を除く) を除外することをお勧めします。
以下は、データベースに入力されるデータを修正するために設定した、私の個人的なエンコーディング パーサーです。
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 が空でない場合は、渡された特定の文字に利用可能なエンコーディングがあることを意味するため、すべての印刷可能な文字のリストと比較され、存在する場合は受け入れ可能な文字であるため、返されます。