若要支援自定義字元編碼,您必須從 Microsoft .NET Framework 的 Encoding 類別衍生出自定義編碼類別,然後從標準的 Flat File Disassembler 或 Flat File Assembler 元件繼承,以建立自定義的平面檔案管線元件。 您可以覆寫受保護的虛擬方法 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());