在管道组件中实现字符编码
若要支持自定义字符编码,必须通过派生自 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 类
可以创建自己的 DataReader 类,该类实现 IDataReader
接口并执行读取,而无需创建任何编码类。
class MyDataReader : IDataReader
{
// Implement data reader functions
// ...
}
XmlReader xr = docspec.Parse(new MyDataReader());