Encoding.GetEncoding Método

Definición

Devuelve una codificación para la página de códigos especificada.

Sobrecargas

GetEncoding(Int32)

Devuelve la codificación asociada al identificador de página de códigos especificado.

GetEncoding(String)

Devuelve la codificación asociada al nombre especificado de la página de códigos.

GetEncoding(Int32, EncoderFallback, DecoderFallback)

Devuelve la codificación asociada al identificador de página de códigos especificado. Los parámetros especifican un controlador de errores para los caracteres que no se pueden codificar y para las secuencias de bytes que no se pueden descodificar.

GetEncoding(String, EncoderFallback, DecoderFallback)

Devuelve la codificación asociada al nombre especificado de la página de códigos. Los parámetros especifican un controlador de errores para los caracteres que no se pueden codificar y para las secuencias de bytes que no se pueden descodificar.

GetEncoding(Int32)

Devuelve la codificación asociada al identificador de página de códigos especificado.

public:
 static System::Text::Encoding ^ GetEncoding(int codepage);
public static System.Text.Encoding GetEncoding (int codepage);
static member GetEncoding : int -> System.Text.Encoding
Public Shared Function GetEncoding (codepage As Integer) As Encoding

Parámetros

codepage
Int32

Identificador de página de códigos de la codificación preferida. Para obtener una lista de valores posibles, vea Encoding.

O bien

0 (cero), para utilizar la codificación predeterminada.

Devoluciones

Codificación asociada a la página de códigos especificada.

Excepciones

codepage es menor que cero o mayor que 65535.

codepage no es compatible con la plataforma subyacente.

codepage no es compatible con la plataforma subyacente.

Ejemplos

En el ejemplo siguiente se obtienen dos instancias de la misma codificación (una por página de códigos y otra por nombre) y se comprueba su igualdad.

using namespace System;
using namespace System::Text;
int main()
{
   
   // Get a UTF-32 encoding by codepage.
   Encoding^ e1 = Encoding::GetEncoding( 12000 );
   
   // Get a UTF-32 encoding by name.
   Encoding^ e2 = Encoding::GetEncoding( "utf-32" );
   
   // Check their equality.
   Console::WriteLine( "e1 equals e2? {0}", e1->Equals( e2 ) );
}

/* 
This code produces the following output.

e1 equals e2? True

*/
using System;
using System.Text;

public class SamplesEncoding  {

   public static void Main()  {

      // Get a UTF-32 encoding by codepage.
      Encoding e1 = Encoding.GetEncoding( 12000 );

      // Get a UTF-32 encoding by name.
      Encoding e2 = Encoding.GetEncoding( "utf-32" );

      // Check their equality.
      Console.WriteLine( "e1 equals e2? {0}", e1.Equals( e2 ) );
   }
}


/* 
This code produces the following output.

e1 equals e2? True

*/
Imports System.Text

Public Class SamplesEncoding   

   Public Shared Sub Main()

      ' Get a UTF-32 encoding by codepage.
      Dim e1 As Encoding = Encoding.GetEncoding(12000)

      ' Get a UTF-32 encoding by name.
      Dim e2 As Encoding = Encoding.GetEncoding("utf-32")

      ' Check their equality.
      Console.WriteLine("e1 equals e2? {0}", e1.Equals(e2))

   End Sub

End Class


'This code produces the following output.
'
'e1 equals e2? True

Comentarios

El controlador de reserva depende del tipo de codificación de codepage . Si codepage es una codificación de página de códigos o de juego de caracteres de doble byte (DBCS), se utiliza un controlador de reserva con ajuste perfecto. De lo contrario, se utiliza un controlador de reserva de reemplazo. Estos controladores de reserva pueden no ser adecuados para la aplicación. Para especificar el controlador de reserva usado por la codificación especificada por codepage , puede llamar a la GetEncoding(Int32, EncoderFallback, DecoderFallback) sobrecarga.

En .NET Framework, el GetEncoding método se basa en la plataforma subyacente para admitir la mayoría de las páginas de códigos. Sin embargo, .NET Framework admite de forma nativa algunas codificaciones. Para obtener una lista de páginas de códigos, vea lista de codificaciones. En .NET Core, el GetEncoding método devuelve las codificaciones admitidas de forma nativa por .net Core. En ambas implementaciones de .NET, puede llamar al GetEncodings método para obtener una matriz de EncodingInfo objetos que contiene información sobre todas las codificaciones disponibles.

Además de las codificaciones que están disponibles de forma nativa en .NET Core o que se admiten de forma intrínseca en una versión específica de la plataforma de .NET Framework, el GetEncoding método devuelve cualquier codificación adicional que esté disponible mediante el registro de un EncodingProvider objeto. Si varios objetos registran la misma codificación EncodingProvider , este método devuelve la última registrada.

También puede proporcionar un valor de 0 para el codepage argumento. Su comportamiento preciso depende de si alguna codificación se ha puesto a disposición mediante el registro de un EncodingProvider objeto:

  • Si se han registrado uno o más proveedores de codificación, devuelve la codificación del último proveedor registrado que ha elegido devolver una codificación cuando GetEncoding se pasa al método un codepage argumento de 0.

  • En .NET Framework, si no se ha registrado ningún proveedor de codificación, si CodePagesEncodingProvider es el proveedor de codificación registrado o si ningún proveedor de codificación registrado controla un codepage valor de 0, devuelve la página de códigos activa del sistema operativo. Para determinar la página de códigos activa en los sistemas Windows, llame a la función GetACP de Windows desde .NET Framework.

  • En .NET Core, si no se ha registrado ningún proveedor de codificación o si ningún proveedor de codificación registrado controla un codepage valor de 0, devuelve UTF8Encoding .

Nota

  • Algunas páginas de códigos no compatibles provocan ArgumentException que se produzca una excepción, mientras que otras producen NotSupportedException . Por lo tanto, el código debe detectar todas las excepciones indicadas en la sección excepciones.
  • En .NET 5 y versiones posteriores, no se admite el identificador 65000de página de códigos , que representa UTF-7.

Nota

Las páginas de códigos ANSI pueden ser diferentes en distintos equipos y pueden cambiar en un solo equipo, lo que provoca daños en los datos. Por este motivo, si la página de códigos activa es una página de códigos ANSI, no se recomienda codificar y descodificar los datos mediante la página de códigos predeterminada devuelta por Encoding.GetEncoding(0) . Para obtener los resultados más coherentes, debe usar una codificación Unicode, como UTF-8 (página de códigos 65001) o UTF-16, en lugar de una página de códigos específica.

GetEncodingDevuelve una instancia almacenada en caché con la configuración predeterminada. Debe utilizar los constructores de clases derivadas para obtener una instancia de con una configuración diferente. Por ejemplo, la UTF32Encoding clase proporciona un constructor que le permite habilitar la detección de errores.

Consulte también

Se aplica a

GetEncoding(String)

Devuelve la codificación asociada al nombre especificado de la página de códigos.

public:
 static System::Text::Encoding ^ GetEncoding(System::String ^ name);
public static System.Text.Encoding GetEncoding (string name);
static member GetEncoding : string -> System.Text.Encoding
Public Shared Function GetEncoding (name As String) As Encoding

Parámetros

name
String

Nombre de la página de códigos de la codificación preferida. Cualquier valor devuelto por la propiedad WebName es válido. Para obtener una lista de valores posibles, vea Encoding.

Devoluciones

Codificación asociada a la página de códigos especificada.

Excepciones

name no es un nombre de página de códigos válido.

O bien

La página de códigos indicada por name no es compatible con la plataforma subyacente.

Ejemplos

En el ejemplo siguiente se obtienen dos instancias de la misma codificación (una por página de códigos y otra por nombre) y se comprueba su igualdad.

using namespace System;
using namespace System::Text;
int main()
{
   
   // Get a UTF-32 encoding by codepage.
   Encoding^ e1 = Encoding::GetEncoding( 12000 );
   
   // Get a UTF-32 encoding by name.
   Encoding^ e2 = Encoding::GetEncoding( "utf-32" );
   
   // Check their equality.
   Console::WriteLine( "e1 equals e2? {0}", e1->Equals( e2 ) );
}

/* 
This code produces the following output.

e1 equals e2? True

*/
using System;
using System.Text;

public class SamplesEncoding  {

   public static void Main()  {

      // Get a UTF-32 encoding by codepage.
      Encoding e1 = Encoding.GetEncoding( 12000 );

      // Get a UTF-32 encoding by name.
      Encoding e2 = Encoding.GetEncoding( "utf-32" );

      // Check their equality.
      Console.WriteLine( "e1 equals e2? {0}", e1.Equals( e2 ) );
   }
}


/* 
This code produces the following output.

e1 equals e2? True

*/
Imports System.Text

Public Class SamplesEncoding   

   Public Shared Sub Main()

      ' Get a UTF-32 encoding by codepage.
      Dim e1 As Encoding = Encoding.GetEncoding(12000)

      ' Get a UTF-32 encoding by name.
      Dim e2 As Encoding = Encoding.GetEncoding("utf-32")

      ' Check their equality.
      Console.WriteLine("e1 equals e2? {0}", e1.Equals(e2))

   End Sub

End Class


'This code produces the following output.
'
'e1 equals e2? True

Comentarios

El controlador de reserva depende del tipo de codificación de name . Si name es una codificación de página de códigos o de juego de caracteres de doble byte (DBCS), se utiliza un controlador de reserva con ajuste perfecto. De lo contrario, se utiliza un controlador de reserva de reemplazo. Estos controladores de reserva pueden no ser adecuados para la aplicación. Para especificar el controlador de reserva usado por la codificación especificada por name , puede llamar a la GetEncoding(String, EncoderFallback, DecoderFallback) sobrecarga.

En .NET Framework, el GetEncoding método se basa en la plataforma subyacente para admitir la mayoría de las páginas de códigos. Sin embargo, .NET Framework admite de forma nativa algunas codificaciones. Para obtener una lista de páginas de códigos, vea lista de codificaciones. En .NET Core, el GetEncoding método devuelve las codificaciones admitidas de forma nativa por .net Core. En ambas implementaciones de .NET, puede llamar al GetEncodings método para obtener una matriz de EncodingInfo objetos que contiene información sobre todas las codificaciones disponibles.

Además de las codificaciones que están disponibles de forma nativa en .NET Core o que se admiten de forma intrínseca en una versión específica de la plataforma de .NET Framework, el GetEncoding método devuelve cualquier codificación adicional que esté disponible mediante el registro de un EncodingProvider objeto. Si varios objetos registran la misma codificación EncodingProvider , este método devuelve la última registrada.

En .NET 5 y versiones posteriores, no se admite el nombre utf-7 de la página de códigos.

Nota:

Las páginas de códigos ANSI pueden ser diferentes en distintos equipos o pueden cambiarse para un único equipo, lo que provoca daños en los datos. Para obtener los resultados más coherentes, utilice Unicode, como UTF-8 (página de códigos 65001) o UTF-16, en lugar de una página de códigos específica.

GetEncodingDevuelve una instancia almacenada en caché con la configuración predeterminada. Debe utilizar los constructores de clases derivadas para obtener una instancia de con una configuración diferente. Por ejemplo, la UTF32Encoding clase proporciona un constructor que le permite habilitar la detección de errores.

Consulte también

Se aplica a

GetEncoding(Int32, EncoderFallback, DecoderFallback)

Devuelve la codificación asociada al identificador de página de códigos especificado. Los parámetros especifican un controlador de errores para los caracteres que no se pueden codificar y para las secuencias de bytes que no se pueden descodificar.

public:
 static System::Text::Encoding ^ GetEncoding(int codepage, System::Text::EncoderFallback ^ encoderFallback, System::Text::DecoderFallback ^ decoderFallback);
public static System.Text.Encoding GetEncoding (int codepage, System.Text.EncoderFallback encoderFallback, System.Text.DecoderFallback decoderFallback);
static member GetEncoding : int * System.Text.EncoderFallback * System.Text.DecoderFallback -> System.Text.Encoding
Public Shared Function GetEncoding (codepage As Integer, encoderFallback As EncoderFallback, decoderFallback As DecoderFallback) As Encoding

Parámetros

codepage
Int32

Identificador de página de códigos de la codificación preferida. Para obtener una lista de valores posibles, vea Encoding.

O bien

0 (cero), para utilizar la codificación predeterminada.

encoderFallback
EncoderFallback

Objeto que proporciona un procedimiento de control de errores cuando no se puede codificar un carácter con la codificación actual.

decoderFallback
DecoderFallback

Objeto que proporciona un procedimiento de control de errores cuando una secuencia de bytes no se puede descodificar con la codificación actual.

Devoluciones

Codificación asociada a la página de códigos especificada.

Excepciones

codepage es menor que cero o mayor que 65535.

codepage no es compatible con la plataforma subyacente.

codepage no es compatible con la plataforma subyacente.

Ejemplos

En el siguiente ejemplo se muestra el Encoding.GetEncoding(String, EncoderFallback, DecoderFallback) método.

// This example demonstrates the EncoderReplacementFallback class.

using namespace System;
using namespace System::Text;

int main()
{
    // Create an encoding, which is equivalent to calling the
    // ASCIIEncoding class constructor.
    // The EncoderReplacementFallback parameter specifies that the
    // string, "(unknown)", replace characters that cannot be encoded.
    // A decoder replacement fallback is also specified, but in this
    // code example the decoding operation cannot fail.

    Encoding^ ascii = Encoding::GetEncoding("us-ascii",
        gcnew EncoderReplacementFallback("(unknown)"),
        gcnew DecoderReplacementFallback("(error)"));

    // 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 are replaced with the fallback replacement string,
    // "(unknown)".

    String^ inputString = "\u00abX\u00bb";
    String^ decodedString;
    String^ twoNewLines = Environment::NewLine + Environment::NewLine;
    array <Byte>^ encodedBytes = 
        gcnew array<Byte>(ascii->GetByteCount(inputString));
    int numberOfEncodedBytes = 0;

    // ---------------------------------------------------------------------
        // Display the name of the encoding.
    Console::WriteLine("The name of the encoding is \"{0}\".{1}", 
        ascii->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 = ascii->GetBytes(inputString, 0, inputString->Length,
        encodedBytes, 0);

    // Display the encoded bytes.
    Console::WriteLine("Encoded bytes in hexadecimal ({0} bytes):{1}",
        numberOfEncodedBytes, Environment::NewLine);
    for(int i = 0; i < encodedBytes->Length; i++)
    {
        Console::Write("0x{0:X2} ", encodedBytes[i]);
        if(((i + 1) % 6) == 0)
        {
            Console::WriteLine();
        }
    }
    Console::Write(twoNewLines);

    // ---------------------------------------------------------------------
    // Decode the encoded bytes, yielding a reconstituted string.

    Console::WriteLine("Decode the encoded bytes...");
    decodedString = ascii->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): "X"
Input string in hexadecimal: 0xAB 0x58 0xBB

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

0x28 0x75 0x6E 0x6B 0x6E 0x6F
0x77 0x6E 0x29 0x58 0x28 0x75
0x6E 0x6B 0x6E 0x6F 0x77 0x6E
0x29

Decode the encoded bytes...
Input string:  "X"
Decoded string:"(unknown)X(unknown)"

*/
// This example demonstrates the EncoderReplacementFallback 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 EncoderReplacementFallback parameter specifies that the
// string, "(unknown)", replace characters that cannot be encoded.
// A decoder replacement fallback is also specified, but in this
// code example the decoding operation cannot fail.

    Encoding ae = Encoding.GetEncoding(
                  "us-ascii",
                  new EncoderReplacementFallback("(unknown)"),
                  new DecoderReplacementFallback("(error)"));

// 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
// are replaced with the fallback replacement string, "(unknown)".

    string inputString = "\u00abX\u00bb";
    string decodedString;
    string twoNewLines = "\n\n";
    byte[] encodedBytes = new byte[ae.GetByteCount(inputString)];
    int numberOfEncodedBytes = 0;
    int ix = 0;

// --------------------------------------------------------------------------
// 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);
    ix = 0;
    foreach (byte b in encodedBytes)
        {
        Console.Write("0x{0:X2} ", (int)b);
        ix++;
        if (0 == ix % 6) Console.WriteLine();
        }
    Console.Write(twoNewLines);

// --------------------------------------------------------------------------
// Decode the encoded bytes, yielding a reconstituted string.

    Console.WriteLine("Decode the encoded bytes...");
    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): "«X»"
Input string in hexadecimal: 0xAB 0x58 0xBB

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

0x28 0x75 0x6E 0x6B 0x6E 0x6F
0x77 0x6E 0x29 0x58 0x28 0x75
0x6E 0x6B 0x6E 0x6F 0x77 0x6E
0x29

Decode the encoded bytes...
Input string:  "«X»"
Decoded string:"(unknown)X(unknown)"

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

Class Sample
    Public Shared Sub Main() 
        
        ' Create an encoding, which is equivalent to calling the 
        ' ASCIIEncoding class constructor. 
        ' The EncoderReplacementFallback parameter specifies that the 
        ' string, "(unknown)", replace characters that cannot be encoded. 
        ' A decoder replacement fallback is also specified, but in this 
        ' code example the decoding 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)
        
        ' 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
        ' are replaced with the fallback replacement string, "(unknown)".

        Dim inputString As String = "«X»"
        Dim decodedString As String
        Dim twoNewLines As String = vbCrLf & vbCrLf
        Dim ix As Integer = 0
        Dim numberOfEncodedBytes As Integer = ae.GetByteCount(inputString)
        ' Counteract the compiler adding an extra byte to the array.
        Dim encodedBytes(numberOfEncodedBytes - 1) As Byte
        
        ' --------------------------------------------------------------------------
        ' 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)
        ix = 0
        Dim b As Byte
        For Each b In encodedBytes
            Console.Write("0x{0:X2} ", Convert.ToInt32(b))
            ix += 1
            If 0 = ix Mod 6 Then
                Console.WriteLine()
            End If
        Next b
        Console.Write(twoNewLines)
        
        ' --------------------------------------------------------------------------
        ' Decode the encoded bytes, yielding a reconstituted string.
        Console.WriteLine("Decode the encoded bytes...")
        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
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...
'Encoded bytes in hexadecimal (19 bytes):
'
'0x28 0x75 0x6E 0x6B 0x6E 0x6F
'0x77 0x6E 0x29 0x58 0x28 0x75
'0x6E 0x6B 0x6E 0x6F 0x77 0x6E
'0x29
'
'Decode the encoded bytes...
'Input string:  "X"
'Decoded string:"(unknown)X(unknown)"
'

Comentarios

Nota:

  • Algunas páginas de códigos no admitidas provocan que ArgumentException se produzca la excepción, mientras que otras lo hacen NotSupportedException . Por lo tanto, el código debe detectar todas las excepciones indicadas en la sección excepciones.
  • En .NET 5 y versiones posteriores, no se admite el identificador 65000de página de códigos , que representa UTF-7.

En .NET Framework, el GetEncoding método se basa en la plataforma subyacente para admitir la mayoría de las páginas de códigos. Sin embargo, .NET Framework admite de forma nativa algunas codificaciones. Para obtener una lista de páginas de códigos, vea lista de codificaciones. En .NET Core, el GetEncoding método devuelve las codificaciones admitidas de forma nativa por .net Core. En ambas implementaciones de .NET, puede llamar al GetEncodings método para obtener una matriz de EncodingInfo objetos que contiene información sobre todas las codificaciones disponibles.

Además de las codificaciones que están disponibles de forma nativa en .NET Core o que se admiten de forma intrínseca en una versión específica de la plataforma de .NET Framework, el GetEncoding método devuelve cualquier codificación adicional que esté disponible mediante el registro de un EncodingProvider objeto. Si varios objetos registran la misma codificación EncodingProvider , este método devuelve la última registrada.

También puede proporcionar un valor de 0 para el codepage argumento. Su comportamiento preciso depende de si alguna codificación se ha puesto a disposición mediante el registro de un EncodingProvider objeto:

  • Si se han registrado uno o más proveedores de codificación, devuelve la codificación del último proveedor registrado que ha elegido devolver una codificación cuando GetEncoding se pasa al método un codepage argumento de 0.

  • En .NET Framework, si no se ha registrado ningún proveedor de codificación, si CodePagesEncodingProvider es el proveedor de codificación registrado o si ningún proveedor de codificación registrado controla un codepage valor de 0, devuelve la página de códigos activa.

  • En .NET Core, si no se ha registrado ningún proveedor de codificación o si ningún proveedor de codificación registrado controla un codepage valor de 0, devuelve la UTF8Encoding codificación.

Nota:

Las páginas de códigos ANSI pueden ser diferentes en distintos equipos y pueden cambiar en un solo equipo, lo que provoca daños en los datos. Por este motivo, si la página de códigos activa es una página de códigos ANSI, no se recomienda codificar y descodificar los datos mediante la página de códigos predeterminada devuelta por Encoding.GetEncoding(0) . Para obtener los resultados más coherentes, debe usar Unicode, como UTF-8 (página de códigos 65001) o UTF-16, en lugar de una página de códigos específica.

Para obtener la codificación asociada a la página de códigos activa, puede proporcionar un valor de 0 para el codepage argumento o, si el código se ejecuta en .NET Framework, recupere el valor de la Encoding.Default propiedad . Para determinar la página de códigos activa actual, llame a la función GetACP de Windows desde .NET Framework.

GetEncodingDevuelve una instancia almacenada en caché con la configuración predeterminada. Debe utilizar los constructores de clases derivadas para obtener una instancia de con una configuración diferente. Por ejemplo, la UTF32Encoding clase proporciona un constructor que le permite habilitar la detección de errores.

Consulte también

Se aplica a

GetEncoding(String, EncoderFallback, DecoderFallback)

Devuelve la codificación asociada al nombre especificado de la página de códigos. Los parámetros especifican un controlador de errores para los caracteres que no se pueden codificar y para las secuencias de bytes que no se pueden descodificar.

public:
 static System::Text::Encoding ^ GetEncoding(System::String ^ name, System::Text::EncoderFallback ^ encoderFallback, System::Text::DecoderFallback ^ decoderFallback);
public static System.Text.Encoding GetEncoding (string name, System.Text.EncoderFallback encoderFallback, System.Text.DecoderFallback decoderFallback);
static member GetEncoding : string * System.Text.EncoderFallback * System.Text.DecoderFallback -> System.Text.Encoding
Public Shared Function GetEncoding (name As String, encoderFallback As EncoderFallback, decoderFallback As DecoderFallback) As Encoding

Parámetros

name
String

Nombre de la página de códigos de la codificación preferida. Cualquier valor devuelto por la propiedad WebName es válido. Se hace una lista de los valores posibles en la columna Nombre de la tabla que aparece en el tema de la clase Encoding.

encoderFallback
EncoderFallback

Objeto que proporciona un procedimiento de control de errores cuando no se puede codificar un carácter con la codificación actual.

decoderFallback
DecoderFallback

Objeto que proporciona un procedimiento de control de errores cuando una secuencia de bytes no se puede descodificar con la codificación actual.

Devoluciones

Codificación asociada a la página de códigos especificada.

Excepciones

name no es un nombre de página de códigos válido.

O bien

La página de códigos indicada por name no es compatible con la plataforma subyacente.

Ejemplos

En el siguiente ejemplo se muestra el Encoding.GetEncoding(String, EncoderFallback, DecoderFallback) método.

// This example demonstrates the EncoderReplacementFallback class.

using namespace System;
using namespace System::Text;

int main()
{
    // Create an encoding, which is equivalent to calling the
    // ASCIIEncoding class constructor.
    // The EncoderReplacementFallback parameter specifies that the
    // string, "(unknown)", replace characters that cannot be encoded.
    // A decoder replacement fallback is also specified, but in this
    // code example the decoding operation cannot fail.

    Encoding^ ascii = Encoding::GetEncoding("us-ascii",
        gcnew EncoderReplacementFallback("(unknown)"),
        gcnew DecoderReplacementFallback("(error)"));

    // 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 are replaced with the fallback replacement string,
    // "(unknown)".

    String^ inputString = "\u00abX\u00bb";
    String^ decodedString;
    String^ twoNewLines = Environment::NewLine + Environment::NewLine;
    array <Byte>^ encodedBytes = 
        gcnew array<Byte>(ascii->GetByteCount(inputString));
    int numberOfEncodedBytes = 0;

    // ---------------------------------------------------------------------
        // Display the name of the encoding.
    Console::WriteLine("The name of the encoding is \"{0}\".{1}", 
        ascii->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 = ascii->GetBytes(inputString, 0, inputString->Length,
        encodedBytes, 0);

    // Display the encoded bytes.
    Console::WriteLine("Encoded bytes in hexadecimal ({0} bytes):{1}",
        numberOfEncodedBytes, Environment::NewLine);
    for(int i = 0; i < encodedBytes->Length; i++)
    {
        Console::Write("0x{0:X2} ", encodedBytes[i]);
        if(((i + 1) % 6) == 0)
        {
            Console::WriteLine();
        }
    }
    Console::Write(twoNewLines);

    // ---------------------------------------------------------------------
    // Decode the encoded bytes, yielding a reconstituted string.

    Console::WriteLine("Decode the encoded bytes...");
    decodedString = ascii->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): "X"
Input string in hexadecimal: 0xAB 0x58 0xBB

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

0x28 0x75 0x6E 0x6B 0x6E 0x6F
0x77 0x6E 0x29 0x58 0x28 0x75
0x6E 0x6B 0x6E 0x6F 0x77 0x6E
0x29

Decode the encoded bytes...
Input string:  "X"
Decoded string:"(unknown)X(unknown)"

*/
// This example demonstrates the EncoderReplacementFallback 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 EncoderReplacementFallback parameter specifies that the
// string, "(unknown)", replace characters that cannot be encoded.
// A decoder replacement fallback is also specified, but in this
// code example the decoding operation cannot fail.

    Encoding ae = Encoding.GetEncoding(
                  "us-ascii",
                  new EncoderReplacementFallback("(unknown)"),
                  new DecoderReplacementFallback("(error)"));

// 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
// are replaced with the fallback replacement string, "(unknown)".

    string inputString = "\u00abX\u00bb";
    string decodedString;
    string twoNewLines = "\n\n";
    byte[] encodedBytes = new byte[ae.GetByteCount(inputString)];
    int numberOfEncodedBytes = 0;
    int ix = 0;

// --------------------------------------------------------------------------
// 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);
    ix = 0;
    foreach (byte b in encodedBytes)
        {
        Console.Write("0x{0:X2} ", (int)b);
        ix++;
        if (0 == ix % 6) Console.WriteLine();
        }
    Console.Write(twoNewLines);

// --------------------------------------------------------------------------
// Decode the encoded bytes, yielding a reconstituted string.

    Console.WriteLine("Decode the encoded bytes...");
    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): "«X»"
Input string in hexadecimal: 0xAB 0x58 0xBB

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

0x28 0x75 0x6E 0x6B 0x6E 0x6F
0x77 0x6E 0x29 0x58 0x28 0x75
0x6E 0x6B 0x6E 0x6F 0x77 0x6E
0x29

Decode the encoded bytes...
Input string:  "«X»"
Decoded string:"(unknown)X(unknown)"

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

Class Sample
    Public Shared Sub Main() 
        
        ' Create an encoding, which is equivalent to calling the 
        ' ASCIIEncoding class constructor. 
        ' The EncoderReplacementFallback parameter specifies that the 
        ' string, "(unknown)", replace characters that cannot be encoded. 
        ' A decoder replacement fallback is also specified, but in this 
        ' code example the decoding 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)
        
        ' 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
        ' are replaced with the fallback replacement string, "(unknown)".

        Dim inputString As String = "«X»"
        Dim decodedString As String
        Dim twoNewLines As String = vbCrLf & vbCrLf
        Dim ix As Integer = 0
        Dim numberOfEncodedBytes As Integer = ae.GetByteCount(inputString)
        ' Counteract the compiler adding an extra byte to the array.
        Dim encodedBytes(numberOfEncodedBytes - 1) As Byte
        
        ' --------------------------------------------------------------------------
        ' 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)
        ix = 0
        Dim b As Byte
        For Each b In encodedBytes
            Console.Write("0x{0:X2} ", Convert.ToInt32(b))
            ix += 1
            If 0 = ix Mod 6 Then
                Console.WriteLine()
            End If
        Next b
        Console.Write(twoNewLines)
        
        ' --------------------------------------------------------------------------
        ' Decode the encoded bytes, yielding a reconstituted string.
        Console.WriteLine("Decode the encoded bytes...")
        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
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...
'Encoded bytes in hexadecimal (19 bytes):
'
'0x28 0x75 0x6E 0x6B 0x6E 0x6F
'0x77 0x6E 0x29 0x58 0x28 0x75
'0x6E 0x6B 0x6E 0x6F 0x77 0x6E
'0x29
'
'Decode the encoded bytes...
'Input string:  "X"
'Decoded string:"(unknown)X(unknown)"
'

Comentarios

En .NET Framework, el GetEncoding método se basa en la plataforma subyacente para admitir la mayoría de las páginas de códigos. Sin embargo, .NET Framework admite de forma nativa algunas codificaciones. Para obtener una lista de páginas de códigos, vea lista de codificaciones. En .NET Core, el GetEncoding método devuelve las codificaciones admitidas de forma nativa por .net Core. En ambas implementaciones de .NET, puede llamar al GetEncodings método para obtener una matriz de EncodingInfo objetos que contiene información sobre todas las codificaciones disponibles.

Además de las codificaciones que están disponibles de forma nativa en .NET Core o que se admiten de forma intrínseca en una versión específica de la plataforma de .NET Framework, el GetEncoding método devuelve cualquier codificación adicional que esté disponible mediante el registro de un EncodingProvider objeto. Si varios objetos registran la misma codificación EncodingProvider , este método devuelve la última registrada.

En .NET 5 y versiones posteriores, no se admite el nombre utf-7 de la página de códigos.

Nota

Las páginas de códigos ANSI pueden ser diferentes en distintos equipos y pueden cambiar en un solo equipo, lo que provoca daños en los datos. Para obtener los resultados más coherentes, debe usar una codificación Unicode, como UTF-8 (página de códigos 65001) o UTF-16, en lugar de una página de códigos específica.

GetEncodingDevuelve una instancia almacenada en caché con la configuración predeterminada. Debe utilizar los constructores de clases derivadas para obtener una instancia de con una configuración diferente. Por ejemplo, la UTF32Encoding clase proporciona un constructor que le permite habilitar la detección de errores.

Consulte también

Se aplica a