DecoderReplacementFallback DecoderReplacementFallback DecoderReplacementFallback DecoderReplacementFallback Class

Definición

Proporciona un mecanismo de control de errores, denominado reserva, para una secuencia codificada de bytes de entrada que no se puede convertir en un carácter de salida.Provides a failure-handling mechanism, called a fallback, for an encoded input byte sequence that cannot be converted to an output character. La reserva emite una cadena de reemplazo especificada por el usuario en lugar de una secuencia descodificada de bytes de entrada.The fallback emits a user-specified replacement string instead of a decoded input byte sequence. Esta clase no puede heredarse.This class cannot be inherited.

public ref class DecoderReplacementFallback sealed : System::Text::DecoderFallback
[System.Serializable]
public sealed class DecoderReplacementFallback : System.Text.DecoderFallback
type DecoderReplacementFallback = class
    inherit DecoderFallback
Public NotInheritable Class DecoderReplacementFallback
Inherits DecoderFallback
Herencia
DecoderReplacementFallbackDecoderReplacementFallbackDecoderReplacementFallbackDecoderReplacementFallback
Atributos

Ejemplos

En el ejemplo de código siguiente, se muestra la clase DecoderReplacementFallback.The following code example demonstrates the DecoderReplacementFallback class.

// This example demonstrates the DecoderReplacementFallback class.

using namespace System;
using namespace System::Text;

int main()
{ 
    // Create an encoding, which is equivalent to calling the 
    // ASCIIEncoding class constructor. 
    // The DecoderReplacementFallback parameter specifies that the 
    // string "(error)" is to replace characters that cannot be decoded. 
    // An encoder replacement fallback is also specified, but in this code
    // example the encoding operation cannot fail.  

    Encoding^ asciiEncoding = Encoding::GetEncoding("us-ascii",
        gcnew EncoderReplacementFallback("(unknown)"),
        gcnew DecoderReplacementFallback("(error)"));
    String^ inputString = "XYZ";
    String^ decodedString;
    String^ twoNewLines = Environment::NewLine + Environment::NewLine;
    array<Byte>^ encodedBytes = gcnew array<Byte>(
        asciiEncoding->GetByteCount(inputString));
    int numberOfEncodedBytes = 0;

    // ---------------------------------------------------------------------
    Console::Clear();

    // Display the name of the encoding.
    Console::WriteLine("The name of the encoding is \"{0}\".{1}",
        asciiEncoding->WebName, Environment::NewLine);

    // Display the input string in text.
    Console::WriteLine("Input string ({0} characters): \"{1}\"", 
        inputString->Length, inputString);

    // Display the input string in hexadecimal.
    Console::Write("Input string in hexadecimal: ");
    for each (char c in inputString) 
    {
        Console::Write("0x{0:X2} ", c);
    }
    Console::Write(twoNewLines);

    // ---------------------------------------------------------------------
    // Encode the input string. 

    Console::WriteLine("Encode the input string...");
    numberOfEncodedBytes = asciiEncoding->GetBytes(inputString, 0,
        inputString->Length, encodedBytes, 0);

    // Display the encoded bytes.
    Console::WriteLine("Encoded bytes in hexadecimal ({0} bytes):{1}", 
        numberOfEncodedBytes, Environment::NewLine);
    for each (Byte b in encodedBytes)
    {
        Console::Write("0x{0:X2} ", b);
    }
    Console::Write(twoNewLines);

    // ---------------------------------------------------------------------

    // Replace the encoded byte sequences for the characters 'X' and 'Z'
    // with the value 0xFF, which is outside the valid range of 0x00 to 0x7F
    // for ASCIIEncoding. The resulting byte sequence is actually the
    // beginning of this code example because it is the input to the decoder
    // operation, and is equivalent to a corrupted or improperly encoded
    // byte sequence. 

    encodedBytes[0] = 0xFF;
    encodedBytes[2] = 0xFF;

    Console::WriteLine("Display the corrupted byte sequence...");
    Console::WriteLine("Encoded bytes in hexadecimal ({0} bytes):{1}", 
        numberOfEncodedBytes, Environment::NewLine);
    for each (Byte b in encodedBytes)
    {
        Console::Write("0x{0:X2} ", b);
    }
    Console::Write(twoNewLines);

    // ---------------------------------------------------------------------
    // Decode the encoded bytes.

    Console::WriteLine("Compare the decoded bytes to the input string...");
    decodedString = asciiEncoding->GetString(encodedBytes);

    // Display the input string and the decoded string for comparison.
    Console::WriteLine("Input string:  \"{0}\"", inputString);
    Console::WriteLine("Decoded string:\"{0}\"", decodedString);
}
/*
This code example produces the following results:

The name of the encoding is "us-ascii".

Input string (3 characters): "XYZ"
Input string in hexadecimal: 0x58 0x59 0x5A

Encode the input string...
Encoded bytes in hexadecimal (3 bytes):

0x58 0x59 0x5A

Display the corrupted byte sequence...
Encoded bytes in hexadecimal (3 bytes):

0xFF 0x59 0xFF

Compare the decoded bytes to the input string...
Input string:  "XYZ"
Decoded string:"(error)Y(error)"

*/
// This example demonstrates the DecoderReplacementFallback class.

using System;
using System.Text;

class Sample 
{
    public static void Main() 
    {

// Create an encoding, which is equivalent to calling the 
// ASCIIEncoding class constructor. 
// The DecoderReplacementFallback parameter specifies that the 
// string "(error)" is to replace characters that cannot be decoded. 
// An encoder replacement fallback is also specified, but in this code
// example the encoding operation cannot fail.  

    Encoding ae = Encoding.GetEncoding(
                  "us-ascii",
                  new EncoderReplacementFallback("(unknown)"), 
                  new DecoderReplacementFallback("(error)"));
    string inputString = "XYZ";
    string decodedString;
    string twoNewLines = "\n\n";
    byte[] encodedBytes = new byte[ae.GetByteCount(inputString)];
    int numberOfEncodedBytes = 0;

// --------------------------------------------------------------------------
    Console.Clear();

// Display the name of the encoding.
    Console.WriteLine("The name of the encoding is \"{0}\".\n", ae.WebName);

// Display the input string in text.
    Console.WriteLine("Input string ({0} characters): \"{1}\"", 
                       inputString.Length, inputString);

// Display the input string in hexadecimal.
    Console.Write("Input string in hexadecimal: ");
    foreach (char c in inputString.ToCharArray()) 
        {
        Console.Write("0x{0:X2} ", (int)c);
        }
    Console.Write(twoNewLines);

// --------------------------------------------------------------------------
// Encode the input string. 

    Console.WriteLine("Encode the input string...");
    numberOfEncodedBytes = ae.GetBytes(inputString, 0, inputString.Length, 
                                       encodedBytes, 0);

// Display the encoded bytes.
    Console.WriteLine("Encoded bytes in hexadecimal ({0} bytes):\n", 
                       numberOfEncodedBytes);
    foreach (byte b in encodedBytes)
        {
        Console.Write("0x{0:X2} ", (int)b);
        }
    Console.Write(twoNewLines);

// --------------------------------------------------------------------------

// Replace the encoded byte sequences for the characters 'X' and 'Z' with the 
// value 0xFF, which is outside the valid range of 0x00 to 0x7F for 
// ASCIIEncoding. The resulting byte sequence is actually the beginning of 
// this code example because it is the input to the decoder operation, and 
// is equivalent to a corrupted or improperly encoded byte sequence. 

    encodedBytes[0] = 0xFF;
    encodedBytes[2] = 0xFF;

    Console.WriteLine("Display the corrupted byte sequence...");
    Console.WriteLine("Encoded bytes in hexadecimal ({0} bytes):\n", 
                       numberOfEncodedBytes);
    foreach (byte b in encodedBytes)
        {
        Console.Write("0x{0:X2} ", (int)b);
        }
    Console.Write(twoNewLines);

// --------------------------------------------------------------------------
// Decode the encoded bytes.

    Console.WriteLine("Compare the decoded bytes to the input string...");
    decodedString = ae.GetString(encodedBytes);

// Display the input string and the decoded string for comparison.
    Console.WriteLine("Input string:  \"{0}\"", inputString);
    Console.WriteLine("Decoded string:\"{0}\"", decodedString);
    }
}
/*
This code example produces the following results:

The name of the encoding is "us-ascii".

Input string (3 characters): "XYZ"
Input string in hexadecimal: 0x58 0x59 0x5A

Encode the input string...
Encoded bytes in hexadecimal (3 bytes):

0x58 0x59 0x5A

Display the corrupted byte sequence...
Encoded bytes in hexadecimal (3 bytes):

0xFF 0x59 0xFF

Compare the decoded bytes to the input string...
Input string:  "XYZ"
Decoded string:"(error)Y(error)"

*/
' This example demonstrates the DecoderReplacementFallback class.
Imports System
Imports System.Text

Class Sample
    Public Shared Sub Main() 
        
        ' Create an encoding, which is equivalent to calling the 
        ' ASCIIEncoding class constructor. 
        ' The DecoderReplacementFallback parameter specifies that the 
        ' string "(error)" is to replace characters that cannot be decoded. 
        ' An encoder replacement fallback is also specified, but in this code
        ' example the encoding operation cannot fail.  

        Dim erf As New EncoderReplacementFallback("(unknown)")
        Dim drf As New DecoderReplacementFallback("(error)")
        Dim ae As Encoding = Encoding.GetEncoding("us-ascii", erf, drf)
        Dim inputString As String = "XYZ"
        Dim decodedString As String
        Dim twoNewLines As String = vbCrLf & vbCrLf
        Dim numberOfEncodedBytes As Integer = ae.GetByteCount(inputString)
        ' Counteract the compiler implicitly adding an extra element.
        Dim encodedBytes(numberOfEncodedBytes - 1) As Byte
        
        ' --------------------------------------------------------------------------
        Console.Clear()
        
        ' Display the name of the encoding.
        Console.WriteLine("The name of the encoding is ""{0}""." & vbCrLf, ae.WebName)
        
        ' Display the input string in text.
        Console.WriteLine("Input string ({0} characters): ""{1}""", _
                          inputString.Length, inputString)
        
        ' Display the input string in hexadecimal. 
        ' Each element is converted to an integer with Convert.ToInt32.
        Console.Write("Input string in hexadecimal: ")
        Dim c As Char
        For Each c In  inputString.ToCharArray()
            Console.Write("0x{0:X2} ", Convert.ToInt32(c))
        Next c
        Console.Write(twoNewLines)
        
        ' --------------------------------------------------------------------------
        ' Encode the input string. 
        Console.WriteLine("Encode the input string...")
        numberOfEncodedBytes = ae.GetBytes(inputString, 0, inputString.Length, _
                                           encodedBytes, 0)
        
        ' Display the encoded bytes. 
        ' Each element is converted to an integer with Convert.ToInt32.
        Console.WriteLine("Encoded bytes in hexadecimal ({0} bytes):" & vbCrLf, _
                                                         numberOfEncodedBytes)
        Dim b As Byte
        For Each b In  encodedBytes
            Console.Write("0x{0:X2} ", Convert.ToInt32(b))
        Next b
        Console.Write(twoNewLines)
        
        ' --------------------------------------------------------------------------
        ' Replace the encoded byte sequences for the characters 'X' and 'Z' with the 
        ' value 0xFF, which is outside the valid range of 0x00 to 0x7F for 
        ' ASCIIEncoding. The resulting byte sequence is actually the beginning of 
        ' this code example because it is the input to the decoder operation, and 
        ' is equivalent to a corrupted or improperly encoded byte sequence. 

        encodedBytes(0) = &HFF
        encodedBytes(2) = &HFF
        
        Console.WriteLine("Display the corrupted byte sequence...")
        Console.WriteLine("Encoded bytes in hexadecimal ({0} bytes):" & vbCrLf, _
                           numberOfEncodedBytes)
        For Each b In  encodedBytes
            Console.Write("0x{0:X2} ", Convert.ToInt32(b))
        Next b
        Console.Write(twoNewLines)
        
        ' --------------------------------------------------------------------------
        ' Decode the encoded bytes.
        Console.WriteLine("Compare the decoded bytes to the input string...")
        decodedString = ae.GetString(encodedBytes)
        
        ' Display the input string and the decoded string for comparison.
        Console.WriteLine("Input string:  ""{0}""", inputString)
        Console.WriteLine("Decoded string:""{0}""", decodedString)
    
    End Sub 'Main
End Class 'Sample
'
'This code example produces the following results:
'
'The name of the encoding is "us-ascii".
'
'Input string (3 characters): "XYZ"
'Input string in hexadecimal: 0x58 0x59 0x5A
'
'Encode the input string...
'Encoded bytes in hexadecimal (3 bytes):
'
'0x58 0x59 0x5A
'
'Display the corrupted byte sequence...
'Encoded bytes in hexadecimal (3 bytes):
'
'0xFF 0x59 0xFF
'
'Compare the decoded bytes to the input string...
'Input string:  "XYZ"
'Decoded string:"(error)Y(error)"
'

Comentarios

Una razón común para una codificación o descodificación de operación no es si la clase de codificación subyacente no proporciona una asignación entre un carácter y una secuencia de bytes equivalente.A common reason for an encoding or decoding operation to fail is if the underlying encoding class does not provide a mapping between a character and an equivalent byte sequence. Por ejemplo, un ASCIIEncoding objeto no puede descodificar un valor de bytes mayor que 0x7F.For example, an ASCIIEncoding object cannot decode a byte value greater than 0x7F. Si no se puede convertir una secuencia de bytes de entrada en un carácter de salida, un DecoderReplacementFallback objeto emite una cadena de reemplazo en la salida para representar la secuencia de bytes de entrada original.If an input byte sequence cannot be converted to an output character, a DecoderReplacementFallback object emits a replacement string into the output to represent the original input byte sequence. A continuación, continúa el proceso de conversión descodificar el resto de la entrada original.The conversion process then continues to decode the remainder of the original input.

La cadena de reemplazo utilizada por un DecoderReplacementFallback objeto viene determinada por la llamada a su constructor de clase.The replacement string used by a DecoderReplacementFallback object is determined by the call to its class constructor. Existen dos opciones:Two options are available:

Esta clase es uno de dos clases de .NET Framework que implementan diferentes estrategias de reserva para el tratamiento de errores de conversión de descodificación.This class is one of two .NET Framework classes that implement different fallback strategies for handling decoding conversion failures. La otra es la DecoderExceptionFallback clase, que produce una DecoderFallbackException cuando se encuentra una secuencia de bytes no válida.The other class is the DecoderExceptionFallback class, which throws a DecoderFallbackException when an invalid byte sequence is encountered.

Constructores

DecoderReplacementFallback() DecoderReplacementFallback() DecoderReplacementFallback() DecoderReplacementFallback()

Inicializa una nueva instancia de la clase DecoderReplacementFallback.Initializes a new instance of the DecoderReplacementFallback class.

DecoderReplacementFallback(String) DecoderReplacementFallback(String) DecoderReplacementFallback(String) DecoderReplacementFallback(String)

Inicializa una nueva instancia de la clase DecoderReplacementFallback utilizando una cadena de reemplazo especificada.Initializes a new instance of the DecoderReplacementFallback class using a specified replacement string.

Propiedades

DefaultString DefaultString DefaultString DefaultString

Obtiene la cadena de reemplazo que es el valor del objeto DecoderReplacementFallback.Gets the replacement string that is the value of the DecoderReplacementFallback object.

MaxCharCount MaxCharCount MaxCharCount MaxCharCount

Obtiene el número de caracteres de la cadena de reemplazo para el objeto DecoderReplacementFallback.Gets the number of characters in the replacement string for the DecoderReplacementFallback object.

Métodos

CreateFallbackBuffer() CreateFallbackBuffer() CreateFallbackBuffer() CreateFallbackBuffer()

Crea un objeto DecoderFallbackBuffer que se inicializa con la cadena de reemplazo de este objeto DecoderReplacementFallback.Creates a DecoderFallbackBuffer object that is initialized with the replacement string of this DecoderReplacementFallback object.

Equals(Object) Equals(Object) Equals(Object) Equals(Object)

Indica si el valor de un objeto especificado es igual al objeto DecoderReplacementFallback.Indicates whether the value of a specified object is equal to the DecoderReplacementFallback object.

GetHashCode() GetHashCode() GetHashCode() GetHashCode()

Recupera el código hash del valor del objeto DecoderReplacementFallback.Retrieves the hash code for the value of the DecoderReplacementFallback object.

GetType() GetType() GetType() GetType()

Obtiene el Type de la instancia actual.Gets the Type of the current instance.

(Inherited from Object)
MemberwiseClone() MemberwiseClone() MemberwiseClone() MemberwiseClone()

Crea una copia superficial del Object actual.Creates a shallow copy of the current Object.

(Inherited from Object)
ToString() ToString() ToString() ToString()

Devuelve una cadena que representa el objeto actual.Returns a string that represents the current object.

(Inherited from Object)

Se aplica a

Consulte también: