Implémentation du codage des caractères dans un composant de pipeline
Pour prendre en charge l’encodage de caractères personnalisés, vous devez implémenter une classe d’encodage personnalisée en dérivant de la classe d’encodage Microsoft .NET Framework, puis créer un composant de pipeline de fichiers plats personnalisé en hériter du composant Standard Flat File Désassembleur ou Assembleur de fichiers plats. Vous pouvez fournir une nouvelle instance d’encodage au moteur d’analyse en remplaçant la méthode virtuelle protégée FFDasmComp.GetDataReader, comme illustré dans l’exemple suivant.
/// <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);
}
Utilisation des classes de codage prédéfinies
Les types de codage suivants sont prédéfinis par Microsoft .NET Framework et permettent de construire l'analyseur :
ASCII
UTF7
UTF8
Unicode (UTF16)
XmlReader xr = docspec.Parse(new DataReader(System.Text.Encoding.UTF8));
Utilisation des pages de code prises en charge
Utilisez le code suivant pour prendre en charge Shift-JIS (codepage 932).
XmlReader xr = docspec.Parse(new DataReader(System.Text.Encoding.GetEncoding(932)));
Utilisation d'une classe de codage privée
Vous pouvez créer votre propre classe d’encodage qui dérive de la classe abstraite System.Text.Encoding et effectuer votre propre encodage et décodage.
class MyEncoding : System.Text.Encoding
{
// overriding methods omitted
}
XmlReader xr = docspec.Parser(new DataReader(new MyEncoding()));
Utilisation d'une classe DataReader privée
Vous pouvez créer votre propre classe DataReader qui implémente l’interface et effectue la IDataReader
lecture sans créer de classes d’encodage.
class MyDataReader : IDataReader
{
// Implement data reader functions
// ...
}
XmlReader xr = docspec.Parse(new MyDataReader());