Implementieren von Zeichencodierung in einer Pipelinekomponente
Um die benutzerdefinierte Zeichencodierung zu unterstützen, müssen Sie eine benutzerdefinierte Codierungsklasse implementieren, indem Sie von der Microsoft .NET Framework Encoding-Klasse abgeleitet werden, und dann eine benutzerdefinierte Flatfilepipelinekomponente erstellen, indem Sie von der Standardkomponente flatfile Disassembler oder FlatFile Assembler erben. Sie können eine neue Codierung instance für die Analyse-Engine bereitstellen, indem Sie die geschützte virtuelle Methode FFDasmComp.GetDataReader überschreiben, wie im folgenden Beispiel gezeigt.
/// <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);
}
Verwenden vordefinierter Codierungsklassen
Die folgenden Codierungsklassen sind vom Microsoft .NET Framework vordefiniert und können zum Erstellen des Parsers verwendet werden:
ASCII
UTF7
UTF8
Unicode: (UTF16)
XmlReader xr = docspec.Parse(new DataReader(System.Text.Encoding.UTF8));
Verwenden von unterstützten Codepages
Verwenden Sie folgenden Code, um Shift-JIS zu unterstützen (Codepage 932).
XmlReader xr = docspec.Parse(new DataReader(System.Text.Encoding.GetEncoding(932)));
Verwenden einer privaten Codierungsklasse
Sie können Ihre eigene Codierungsklasse erstellen, die von der abstrakten System.Text.Encoding-Klasse abgeleitet ist, und Ihre eigene Codierung und Decodierung ausführen.
class MyEncoding : System.Text.Encoding
{
// overriding methods omitted
}
XmlReader xr = docspec.Parser(new DataReader(new MyEncoding()));
Verwenden einer privaten DataReader-Klasse
Sie können Ihre eigene DataReader-Klasse erstellen, die die IDataReader
Schnittstelle implementiert und Lesevorgänge ausführt, ohne Codierungsklassen zu erstellen.
class MyDataReader : IDataReader
{
// Implement data reader functions
// ...
}
XmlReader xr = docspec.Parse(new MyDataReader());