パイプライン コンポーネントでの文字エンコードの実装
カスタム文字エンコードをサポートするには、Microsoft .NET Framework Encoding クラスから派生してカスタム エンコード クラスを実装し、標準のフラット ファイル逆アセンブラーまたはフラット ファイル アセンブラー コンポーネントから継承してカスタム フラット ファイル パイプライン コンポーネントを作成する必要があります。 次の例に示すように、保護された仮想メソッド FFDasmComp.GetDataReader をオーバーライドすることで、解析エンジンに新しいエンコード インスタンスを指定できます。
/// <summary>
/// Gets a data reader instance
/// </summary>
/// <param name="dataStream">Data stream</param>
/// <param name="dataEncoding">Data encoding</param>
/// <param name="detectEncodingFromByteOrderMarks">Detect encoding from a byte order mark</param>
/// <returns>IDataReader instance</returns>
protected override IDataReader GetDataReader(Stream dataStream, Encoding dataEncoding, bool detectEncodingFromByteOrderMarks)
{
// Delegate call to the base implementation passing fixed UTF-7 encoding
return base.GetDataReader(dataStream, new CustomEncoding(), false);
}
定義済みエンコード クラスの使用
次のエンコードの種類は Microsoft .NET Framework で定義済みであり、パーサーの構築に使用できます。
ASCII
UTF7
UTF8
Unicode (UTF16)
XmlReader xr = docspec.Parse(new DataReader(System.Text.Encoding.UTF8));
サポートされているコード ページの使用
Shift-JIS (コード ページ 932) をサポートするには、次のコードを使用します。
XmlReader xr = docspec.Parse(new DataReader(System.Text.Encoding.GetEncoding(932)));
プライベート エンコード クラスの使用
System.Text.Encoding 抽象クラスから派生した独自のエンコード クラスを作成し、独自のエンコードとデコードを実行できます。
class MyEncoding : System.Text.Encoding
{
// overriding methods omitted
}
XmlReader xr = docspec.Parser(new DataReader(new MyEncoding()));
プライベート DataReader クラスの使用
インターフェイスを実装し、エンコード クラスをIDataReader
作成せずに読み取りを実行する独自の DataReader クラスを作成できます。
class MyDataReader : IDataReader
{
// Implement data reader functions
// ...
}
XmlReader xr = docspec.Parse(new MyDataReader());