Compartilhar via


EncoderExceptionFallback Classe

Definição

Fornece um mecanismo de tratamento de falha chamado fallback para um caractere de entrada que não pode ser convertido em uma sequência de bytes de saída. O fallback gerará uma exceção se um caractere de entrada não puder ser convertido em uma sequência de bytes de saída. Essa classe não pode ser herdada.

public ref class EncoderExceptionFallback sealed : System::Text::EncoderFallback
public sealed class EncoderExceptionFallback : System.Text.EncoderFallback
[System.Serializable]
public sealed class EncoderExceptionFallback : System.Text.EncoderFallback
type EncoderExceptionFallback = class
    inherit EncoderFallback
[<System.Serializable>]
type EncoderExceptionFallback = class
    inherit EncoderFallback
Public NotInheritable Class EncoderExceptionFallback
Inherits EncoderFallback
Herança
EncoderExceptionFallback
Atributos

Exemplos

O exemplo de código a seguir demonstra o e EncoderFallbackException as EncoderExceptionFallback classes.

// This example demonstrates the EncoderExceptionFallback class.

using namespace System;
using namespace System::Text;

int main()
{
    // Create an encoding, which is equivalent to calling the
    // ASCIIEncoding class constructor.
    // The EncoderExceptionFallback parameter causes an exception to
    // be thrown when a character cannot be encoded.
    // A decoder exception fallback is also specified, but it is not
    // used because this example terminates during the encoding operation.

    Encoding^ asciiEncoding = Encoding::GetEncoding("us-ascii",
        gcnew EncoderExceptionFallback(), gcnew DecoderExceptionFallback());

    // The input string consists of the Unicode characters LEFT POINTING
    // DOUBLE ANGLE QUOTATION MARK (U+00AB), 'X' (U+0058), and RIGHT
    // POINTING DOUBLE ANGLE QUOTATION MARK (U+00BB).
    // The encoding can only encode characters in the US-ASCII range of
    // U+0000 through U+007F. Consequently, the characters bracketing the
    // 'X' character cause an exception.
    String^ inputString = L"\u00abX\u00bb";

    String^ twoNewLines = Environment::NewLine + Environment::NewLine;
    array<Byte>^ encodedBytes = gcnew array<Byte>(
        asciiEncoding->GetMaxByteCount(inputString->Length));
    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);

    // ---------------------------------------------------------------------
    // Attempt to encode the input string. However, an exception is thrown
    // before the input string can be encoded.

    Console::WriteLine("Encode the input string...");

    // The code example terminates during the call to the GetBytes() method.
    try
    {
        numberOfEncodedBytes = asciiEncoding->GetBytes(inputString, 0,
            inputString->Length, encodedBytes, 0);
        // This statement is never executed.
        Console::WriteLine("This statement is never executed.");
    }
    catch (EncoderFallbackException^ ex)
    {
        Console::WriteLine(ex);
        Console::WriteLine(
            "{0}*** THE CODE EXAMPLE TERMINATES HERE AS INTENDED. ***",
            Environment::NewLine);
    }
}

/*
This code example produces the following results:

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

Input string (3 characters): "X"
Input string in hexadecimal: 0xAB 0x58 0xBB

Encode the input string...
System.Text.EncoderFallbackException: Unable to translate Unicode character \u00AB at inde
x 0 to specified code page.
at System.Text.EncoderExceptionFallbackBuffer.Fallback(Char charUnknown, Int32 index)
at System.Text.EncoderFallbackBuffer.InternalFallback(Char ch, Char*& chars)
at System.Text.ASCIIEncoding.GetBytes(Char* chars, Int32 charCount, Byte* bytes, Int32
byteCount, EncoderNLS encoder)
at System.Text.ASCIIEncoding.GetBytes(String chars, Int32 charIndex, Int32 charCount, B
yte[] bytes, Int32 byteIndex)
at Sample.Main()

*** THE CODE EXAMPLE TERMINATES HERE AS INTENDED. ***

*/
// This example demonstrates the EncoderExceptionFallback 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 EncoderExceptionFallback parameter causes an exception to
// be thrown when a character cannot be encoded.
// A decoder exception fallback is also specified, but it is not
// used because this example terminates during the encoding operation.

    Encoding ae = Encoding.GetEncoding(
                  "us-ascii",
                  new EncoderExceptionFallback(),
                  new DecoderExceptionFallback());

// The input string consists of the Unicode characters LEFT POINTING
// DOUBLE ANGLE QUOTATION MARK (U+00AB), 'X' (U+0058), and RIGHT POINTING
// DOUBLE ANGLE QUOTATION MARK (U+00BB).
// The encoding can only encode characters in the US-ASCII range of U+0000
// through U+007F. Consequently, the characters bracketing the 'X' character
// cause an exception.
    string inputString = "\u00abX\u00bb";

    string twoNewLines = "\n\n";
    byte[] encodedBytes = new byte[ae.GetMaxByteCount(inputString.Length)];
    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);

// --------------------------------------------------------------------------
// Attempt to encode the input string. However, an exception is thrown before
// the input string can be encoded.

    Console.WriteLine("Encode the input string...");

// The code example terminates during the call to the GetBytes() method.
    try {
        numberOfEncodedBytes = ae.GetBytes(inputString, 0, inputString.Length,
                                           encodedBytes, 0);
        }
    catch (EncoderFallbackException e)
        {
        Console.WriteLine(e);
        Console.WriteLine("\n*** THE CODE EXAMPLE TERMINATES HERE AS INTENDED. ***");
        return;
        }

// This statement is never executed.
    Console.WriteLine("This statement is never executed.");
    }
}
/*
This code example produces the following results:

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

Input string (3 characters): "«X»"
Input string in hexadecimal: 0xAB 0x58 0xBB

Encode the input string...
System.Text.EncoderFallbackException: Unable to translate Unicode character \u00AB at inde
x 0 to specified code page.
   at System.Text.EncoderExceptionFallbackBuffer.Fallback(Char charUnknown, Int32 index)
   at System.Text.EncoderFallbackBuffer.InternalFallback(Char ch, Char*& chars)
   at System.Text.ASCIIEncoding.GetBytes(Char* chars, Int32 charCount, Byte* bytes, Int32
byteCount, EncoderNLS encoder)
   at System.Text.ASCIIEncoding.GetBytes(String chars, Int32 charIndex, Int32 charCount, B
yte[] bytes, Int32 byteIndex)
   at Sample.Main()

*** THE CODE EXAMPLE TERMINATES HERE AS INTENDED. ***

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

Class Sample
    Public Shared Sub Main() 
        
        ' Create an encoding, which is equivalent to calling the 
        ' ASCIIEncoding class constructor. 
        ' The EncoderExceptionFallback parameter causes an exception to
        ' be thrown when a character cannot be encoded. 
        ' A decoder exception fallback is also specified, but it is not 
        ' used because this example terminates during the encoding operation.  


        Dim eef As New EncoderExceptionFallback()
        Dim def As New DecoderExceptionFallback()
        Dim ae As Encoding = Encoding.GetEncoding("us-ascii", eef, def)
        
        ' The input string consists of the Unicode characters LEFT POINTING 
        ' DOUBLE ANGLE QUOTATION MARK (U+00AB), 'X' (U+0058), and RIGHT POINTING 
        ' DOUBLE ANGLE QUOTATION MARK (U+00BB). 
        ' The encoding can only encode characters in the US-ASCII range of U+0000 
        ' through U+007F. Consequently, the characters bracketing the 'X' character
        ' cause an exception.

        Dim inputString As String = "«X»"
        
        Dim twoNewLines As String = vbCrLf & vbCrLf
        Dim numberOfEncodedBytes As Integer = ae.GetMaxByteCount(inputString.Length)
        ' Counteract the compiler 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)
        
        ' --------------------------------------------------------------------------
        ' Attempt to encode the input string. However, an exception is thrown before
        ' the input string can be encoded.
        Console.WriteLine("Encode the input string...")
        
        ' The code example terminates during the call to the GetBytes() method.
        Try
            numberOfEncodedBytes = ae.GetBytes(inputString, 0, inputString.Length, _
                                               encodedBytes, 0)
        Catch e As EncoderFallbackException
            Console.WriteLine(e)
            Console.WriteLine(vbCrLf & _
                              "*** THE CODE EXAMPLE TERMINATES HERE AS INTENDED. ***")
            Return
        End Try
        
        ' This statement is never executed.
        Console.WriteLine("This statement is never executed.")
    
    End Sub
End Class
'
'This code example produces the following results:
'
'The name of the encoding is "us-ascii".
'
'Input string (3 characters): "X"
'Input string in hexadecimal: 0xAB 0x58 0xBB
'
'Encode the input string...
'System.Text.EncoderFallbackException: Unable to translate Unicode character \u00AB at inde
'x 0 to specified code page.
'   at System.Text.EncoderExceptionFallbackBuffer.Fallback(Char charUnknown, Int32 index)
'   at System.Text.EncoderFallbackBuffer.InternalFallback(Char ch, Char*& chars)
'   at System.Text.ASCIIEncoding.GetBytes(Char* chars, Int32 charCount, Byte* bytes, Int32
'byteCount, EncoderNLS encoder)
'   at System.Text.ASCIIEncoding.GetBytes(String chars, Int32 charIndex, Int32 charCount, B
'yte[] bytes, Int32 byteIndex)
'   at Sample.Main()
'
'*** THE CODE EXAMPLE TERMINATES HERE AS INTENDED. ***
'

Comentários

Uma codificação mapeia um caractere Unicode para uma sequência codificada de bytes, que pode ser transferida posteriormente para um meio físico, como um disco ou por meio de um link de comunicação. Os caracteres podem ser mapeados de várias maneiras e uma codificação específica é representada por um tipo derivado da Encoding classe. Especificamente, o método do GetBytes tipo de codificação codifica um caractere para uma sequência de bytes e o GetChars método decodifica uma sequência de bytes para um caractere.

Uma operação de codificação poderá falhar se o caractere de entrada não puder ser representado pela codificação. Por exemplo, um ASCIIEncoding objeto não pode codificar um caractere que produz um valor de ponto de código Unicode que está fora do intervalo U+0000 a U+007F.

Nos casos em que uma conversão de codificação ou decodificação não pode ser executada, o .NET Framework fornece um mecanismo de tratamento de falhas chamado fallback. Seu aplicativo pode usar o fallback predefinido .NET Framework codificador ou pode criar um fallback de codificador personalizado derivado das classes e do EncoderFallback codificadorEncoderFallbackBuffer.

O .NET Framework fornece duas classes predefinidas que implementam diferentes estratégias de fallback para lidar com falhas de conversão de codificação. A EncoderReplacementFallback classe substitui uma cadeia de caracteres fornecida para qualquer caractere de entrada que não possa ser convertido. A cadeia de caracteres substituta é codificada no lugar do caractere inválido e, em seguida, a operação de codificação continua convertendo o restante da entrada. Por outro lado, a EncoderExceptionFallback classe lança um EncoderFallbackException quando um caractere inválido é encontrado.

Construtores

EncoderExceptionFallback()

Inicializa uma nova instância da classe EncoderExceptionFallback.

Propriedades

MaxCharCount

Obtém o número máximo de caracteres que esta instância pode retornar.

Métodos

CreateFallbackBuffer()

Retorna um buffer de fallback do decodificador que gera uma exceção se não for possível converter uma sequência de caracteres em uma sequência de bytes.

Equals(Object)

Indica se o objeto EncoderExceptionFallback atual e um objeto especificado são iguais.

GetHashCode()

Recupera o código hash para essa instância.

GetType()

Obtém o Type da instância atual.

(Herdado de Object)
MemberwiseClone()

Cria uma cópia superficial do Object atual.

(Herdado de Object)
ToString()

Retorna uma cadeia de caracteres que representa o objeto atual.

(Herdado de Object)

Aplica-se a

Confira também