Implementación de la codificación de caracteres en un componente de canalización
Para admitir la codificación de caracteres personalizados, debe implementar una clase de codificación personalizada derivando de la clase de codificación de Microsoft .NET Framework y, a continuación, crear un componente de canalización de archivos planos personalizado heredando del componente estándar de desensamblador de archivos planos o ensamblador de archivos planos. Puede proporcionar una nueva instancia de codificación al motor de análisis reemplazando el método virtual protegido FFDasmComp.GetDataReader como se muestra en el ejemplo siguiente.
/// <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);
}
Usar clases de codificación predefinidas
Microsoft .NET Framework predefine los siguientes tipos de codificación que se pueden usar para construir el analizador:
ASCII
UTF7
UTF8
Unicode (UTF16)
XmlReader xr = docspec.Parse(new DataReader(System.Text.Encoding.UTF8));
Usar páginas de códigos compatibles
Use el siguiente código para admitir Shift-JIS (página de códigos 932).
XmlReader xr = docspec.Parse(new DataReader(System.Text.Encoding.GetEncoding(932)));
Usar una clase de codificación privada
Puede crear su propia clase de codificación que derive de la clase abstracta System.Text.Encoding y realice su propia codificación y descodificación.
class MyEncoding : System.Text.Encoding
{
// overriding methods omitted
}
XmlReader xr = docspec.Parser(new DataReader(new MyEncoding()));
Usar una clase DataReader privada
Puede crear su propia clase DataReader que implemente la interfaz y realice la IDataReader
lectura sin crear ninguna clase de codificación.
class MyDataReader : IDataReader
{
// Implement data reader functions
// ...
}
XmlReader xr = docspec.Parse(new MyDataReader());