若要支持自定义字符编码,必须通过派生自 Microsoft .NET Framework 编码 类来实现自定义编码类,然后通过继承标准平面文件反汇编程序或平面文件汇编程序组件来创建自定义平面文件管道组件。 可以通过重写受保护的虚拟方法 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
UTF-7
UTF8
Unicode (UTF16)
XmlReader xr = docspec.Parse(new DataReader(System.Text.Encoding.UTF8));
使用支持的代码页
使用以下代码支持 Shift-JIS(codepage 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 类
可以创建自己的 DataReader 类,该类实现 IDataReader
接口和执行读取,而无需创建任何编码类。
class MyDataReader : IDataReader
{
// Implement data reader functions
// ...
}
XmlReader xr = docspec.Parse(new MyDataReader());