Sdílet prostřednictvím


Encoding.GetEncoding Metoda

Definice

Vrátí kódování pro zadanou znakovou stránku.

Přetížení

GetEncoding(Int32)

Vrátí kódování přidružené k zadanému identifikátoru znakové stránky.

GetEncoding(String)

Vrátí kódování přidružené k zadanému názvu znakové stránky.

GetEncoding(Int32, EncoderFallback, DecoderFallback)

Vrátí kódování přidružené k zadanému identifikátoru znakové stránky. Parametry určují obslužnou rutinu chyby pro znaky, které nelze zakódovat, a sekvence bajtů, které nelze dekódovat.

GetEncoding(String, EncoderFallback, DecoderFallback)

Vrátí kódování přidružené k zadanému názvu znakové stránky. Parametry určují obslužnou rutinu chyby pro znaky, které nelze zakódovat, a sekvence bajtů, které nelze dekódovat.

GetEncoding(Int32)

Zdroj:
Encoding.cs
Zdroj:
Encoding.cs
Zdroj:
Encoding.cs

Vrátí kódování přidružené k zadanému identifikátoru znakové stránky.

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

Parametry

codepage
Int32

Identifikátor znakové stránky upřednostňovaného kódování. Seznam možných hodnot najdete v tématu Encoding.

-nebo-

0 (nula), aby se použilo výchozí kódování.

Návraty

Kódování, které je přidruženo k zadané znakové stránce.

Výjimky

codepage je menší než nula nebo větší než 65535.

codepage základní platforma nepodporuje.

codepage základní platforma nepodporuje.

Příklady

Následující příklad získá dvě instance stejného kódování (jednu podle znakové stránky a druhou podle názvu) a zkontroluje jejich rovnost.

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

Poznámky

Náhradní obslužná rutina závisí na typu kódování .codepage Pokud codepage je kódová stránka nebo kódování dvoubavové znakové sady (DBCS), použije se nejvhodnější obslužná rutina pro použití náhradního kódu. V opačném případě se použije náhradní obslužná rutina. Tyto náhradní obslužné rutiny nemusí být pro vaši aplikaci vhodné. Chcete-li určit náhradní obslužnou rutinu používanou kódováním určeným parametrem codepage, můžete volat GetEncoding(Int32, EncoderFallback, DecoderFallback) přetížení.

V rozhraní .NET Framework se metoda spoléhá na základní platformu, GetEncoding která podporuje většinu znakových stránek. Rozhraní .NET Framework však nativně podporuje některá kódování. Seznam znakových stránek najdete v tématu Seznam kódování. V .NET Core metoda vrací kódování nativně GetEncoding podporovaná platformou .NET Core. V obou implementacích .NET můžete voláním GetEncodings metody získat pole EncodingInfo objektů, které obsahují informace o všech dostupných kódováních.

Kromě kódování, která jsou nativně dostupná v .NET Core nebo která jsou vnitřně podporována v konkrétní verzi platformy rozhraní .NET Framework, GetEncoding vrátí metoda všechna další kódování, která jsou k dispozici registrací objektu EncodingProvider . Pokud bylo stejné kódování zaregistrováno více EncodingProvider objekty, vrátí tato metoda poslední zaregistrovaný.

Jako argument můžete také zadat hodnotu 0 codepage . Jeho přesné chování závisí na tom, zda byla registrací objektu zpřístupněna nějaká EncodingProvider kódování:

  • Pokud byl zaregistrován jeden nebo více zprostředkovatelů kódování, vrátí kódování posledního registrovaného zprostředkovatele, který se rozhodl vrátit kódování, když GetEncoding je metodě předán codepage argument 0.

  • V rozhraní .NET Framework, pokud není registrován žádný zprostředkovatel kódování, pokud CodePagesEncodingProvider je registrovaným zprostředkovatelem kódování nebo pokud žádný registrovaný zprostředkovatel kódování nezpracuje codepage hodnotu 0, vrátí aktivní znakovou stránku operačního systému. Chcete-li zjistit aktivní znakovou stránku v systémech Windows, zavolejte funkci Windows GetACP z rozhraní .NET Framework.

  • Pokud v .NET Core není zaregistrovaný žádný zprostředkovatel kódování nebo pokud žádný registrovaný zprostředkovatel kódování nezpracuje codepage hodnotu 0, vrátí UTF8Encodinghodnotu .

Poznámka

  • Některé nepodporované znakové stránky způsobí ArgumentException vyvolání , zatímco jiné způsobí NotSupportedException. Proto váš kód musí zachytit všechny výjimky uvedené v části Výjimky.
  • V .NET 5 a novějších verzích není podporován identifikátor 65000znakové stránky , který představuje UTF-7.

Poznámka

Znakové stránky ANSI se můžou lišit v různých počítačích a můžou se měnit na jednom počítači, což vede k poškození dat. Z tohoto důvodu, pokud je aktivní znaková stránka znakovou stránkou ANSI, kódování a dekódování dat pomocí výchozí znakové stránky vrácené nástrojem Encoding.GetEncoding(0) se nedoporučuje. Pro co nejkonzistentnější výsledky byste měli místo konkrétní znakové stránky použít kódování Unicode, například UTF-8 (znaková stránka 65001) nebo UTF-16.

GetEncoding vrátí instanci uloženou v mezipaměti s výchozím nastavením. Konstruktory odvozených tříd byste měli použít k získání instance s různými nastaveními. Třída například poskytuje konstruktor, UTF32Encoding který umožňuje povolit detekci chyb.

Viz také

Platí pro

GetEncoding(String)

Zdroj:
Encoding.cs
Zdroj:
Encoding.cs
Zdroj:
Encoding.cs

Vrátí kódování přidružené k zadanému názvu znakové stránky.

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

Parametry

name
String

Název znakové stránky upřednostňovaného kódování. Jakákoli hodnota vrácená WebName vlastností je platná. Seznam možných hodnot najdete v tématu Encoding.

Návraty

Kódování přidružené k zadané znakové stránce.

Výjimky

name není platný název znakové stránky.

-nebo-

Základní platforma nepodporuje znakovou stránku označenou znakem name .

Příklady

Následující příklad získá dvě instance stejného kódování (jednu podle znakové stránky a druhou podle názvu) a zkontroluje jejich rovnost.

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

Poznámky

Náhradní obslužná rutina závisí na typu kódování .name Pokud name je kódová stránka nebo kódování dvoubavové znakové sady (DBCS), použije se nejvhodnější obslužná rutina pro použití náhradního kódu. V opačném případě se použije náhradní obslužná rutina. Tyto náhradní obslužné rutiny nemusí být pro vaši aplikaci vhodné. Chcete-li určit náhradní obslužnou rutinu používanou kódováním určeným parametrem name, můžete volat GetEncoding(String, EncoderFallback, DecoderFallback) přetížení.

V rozhraní .NET Framework se metoda spoléhá na základní platformu, GetEncoding která podporuje většinu znakových stránek. Rozhraní .NET Framework však nativně podporuje některá kódování. Seznam znakových stránek najdete v tématu Seznam kódování. V .NET Core metoda vrací kódování nativně GetEncoding podporovaná platformou .NET Core. V obou implementacích .NET můžete voláním GetEncodings metody získat pole EncodingInfo objektů, které obsahují informace o všech dostupných kódováních.

Kromě kódování, která jsou nativně dostupná v .NET Core nebo která jsou vnitřně podporována v konkrétní verzi platformy rozhraní .NET Framework, GetEncoding vrátí metoda všechna další kódování, která jsou k dispozici registrací objektu EncodingProvider . Pokud bylo stejné kódování zaregistrováno více EncodingProvider objekty, vrátí tato metoda poslední zaregistrovaný.

V .NET 5 a novějších verzích není název utf-7 znakové stránky podporovaný.

Poznámka

Znakové stránky ANSI se můžou lišit v různých počítačích nebo se dají změnit pro jeden počítač, což vede k poškození dat. Pro nejkonzistentnější výsledky použijte Unicode, například UTF-8 (kódová stránka 65001) nebo UTF-16 místo konkrétní znakové stránky.

GetEncoding vrátí instanci uloženou v mezipaměti s výchozím nastavením. Konstruktory odvozených tříd byste měli použít k získání instance s různými nastaveními. Třída například poskytuje konstruktor, UTF32Encoding který umožňuje povolit detekci chyb.

Viz také

Platí pro

GetEncoding(Int32, EncoderFallback, DecoderFallback)

Zdroj:
Encoding.cs
Zdroj:
Encoding.cs
Zdroj:
Encoding.cs

Vrátí kódování přidružené k zadanému identifikátoru znakové stránky. Parametry určují obslužnou rutinu chyby pro znaky, které nelze zakódovat, a sekvence bajtů, které nelze dekódovat.

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

Parametry

codepage
Int32

Identifikátor znakové stránky upřednostňovaného kódování. Seznam možných hodnot najdete v tématu Encoding.

-nebo-

0 (nula), aby se použilo výchozí kódování.

encoderFallback
EncoderFallback

Objekt, který poskytuje proceduru zpracování chyb, pokud znak nelze kódovat s aktuálním kódováním.

decoderFallback
DecoderFallback

Objekt, který poskytuje proceduru zpracování chyb, když posloupnost bajtů nelze dekódovat s aktuálním kódováním.

Návraty

Kódování, které je přidruženo k zadané znakové stránce.

Výjimky

codepage je menší než nula nebo větší než 65535.

codepage základní platforma nepodporuje.

codepage základní platforma nepodporuje.

Příklady

Následující příklad ukazuje metodu Encoding.GetEncoding(String, EncoderFallback, DecoderFallback) .

// 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)"
'

Poznámky

Poznámka

  • Některé nepodporované znakové stránky způsobují vyvolání výjimky ArgumentException , zatímco jiné způsobují NotSupportedException. Proto váš kód musí zachytit všechny výjimky uvedené v části Výjimky.
  • V .NET 5 a novějších verzích není podporován identifikátor 65000znakové stránky , který představuje UTF-7.

V rozhraní .NET Framework se metoda spoléhá na základní platformu, GetEncoding která podporuje většinu znakových stránek. Rozhraní .NET Framework však nativně podporuje některá kódování. Seznam znakových stránek najdete v tématu Seznam kódování. V .NET Core metoda vrací kódování nativně GetEncoding podporovaná platformou .NET Core. V obou implementacích .NET můžete voláním GetEncodings metody získat pole EncodingInfo objektů, které obsahují informace o všech dostupných kódováních.

Kromě kódování, která jsou nativně dostupná v .NET Core nebo která jsou vnitřně podporována v konkrétní verzi platformy rozhraní .NET Framework, GetEncoding vrátí metoda všechna další kódování, která jsou k dispozici registrací objektu EncodingProvider . Pokud bylo stejné kódování zaregistrováno více EncodingProvider objekty, vrátí tato metoda poslední zaregistrovaný.

Jako argument můžete také zadat hodnotu 0 codepage . Jeho přesné chování závisí na tom, zda byla registrací objektu zpřístupněna nějaká EncodingProvider kódování:

  • Pokud byl zaregistrován jeden nebo více zprostředkovatelů kódování, vrátí kódování posledního registrovaného zprostředkovatele, který se rozhodl vrátit kódování, když GetEncoding je metodě předán codepage argument 0.

  • V rozhraní .NET Framework, pokud není registrován žádný zprostředkovatel kódování, pokud CodePagesEncodingProvider je registrovaným zprostředkovatelem kódování nebo pokud žádný registrovaný zprostředkovatel kódování nezpracuje codepage hodnotu 0, vrátí aktivní znakovou stránku.

  • Pokud v .NET Core není zaregistrovaný žádný zprostředkovatel kódování nebo pokud žádný registrovaný zprostředkovatel kódování nezpracuje codepage hodnotu 0, vrátí UTF8Encoding kódování.

Poznámka

Znakové stránky ANSI se můžou lišit v různých počítačích a můžou se měnit na jednom počítači, což vede k poškození dat. Z tohoto důvodu, pokud je aktivní znaková stránka znakovou stránkou ANSI, kódování a dekódování dat pomocí výchozí znakové stránky vrácené nástrojem Encoding.GetEncoding(0) se nedoporučuje. Pro nejkonzistentnější výsledky byste měli místo konkrétní znakové stránky použít Unicode, například UTF-8 (znaková stránka 65001) nebo UTF-16.

Chcete-li získat kódování spojené s aktivní znakovou stránkou, můžete zadat hodnotu 0 argumentu codepage nebo, pokud je kód spuštěn v rozhraní .NET Framework, načíst hodnotu Encoding.Default vlastnosti. Chcete-li zjistit aktuální aktivní znakovou stránku, zavolejte funkci Windows GetACP z rozhraní .NET Framework.

GetEncoding vrátí instanci uloženou v mezipaměti s výchozím nastavením. Konstruktory odvozených tříd byste měli použít k získání instance s různými nastaveními. Třída například poskytuje konstruktor, UTF32Encoding který umožňuje povolit detekci chyb.

Viz také

Platí pro

GetEncoding(String, EncoderFallback, DecoderFallback)

Zdroj:
Encoding.cs
Zdroj:
Encoding.cs
Zdroj:
Encoding.cs

Vrátí kódování přidružené k zadanému názvu znakové stránky. Parametry určují obslužnou rutinu chyby pro znaky, které nelze zakódovat, a sekvence bajtů, které nelze dekódovat.

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

Parametry

name
String

Název znakové stránky upřednostňovaného kódování. Jakákoli hodnota vrácená WebName vlastností je platná. Možné hodnoty jsou uvedeny ve sloupci Název tabulky, která se zobrazí v Encoding tématu třídy.

encoderFallback
EncoderFallback

Objekt, který poskytuje proceduru zpracování chyb, pokud znak nelze kódovat s aktuálním kódováním.

decoderFallback
DecoderFallback

Objekt, který poskytuje proceduru zpracování chyb, když posloupnost bajtů nelze dekódovat s aktuálním kódováním.

Návraty

Kódování, které je přidruženo k zadané znakové stránce.

Výjimky

name není platný název znakové stránky.

-nebo-

Základní platforma nepodporuje znakovou stránku označenou znakem name .

Příklady

Následující příklad ukazuje metodu Encoding.GetEncoding(String, EncoderFallback, DecoderFallback) .

// 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)"
'

Poznámky

V rozhraní .NET Framework se metoda spoléhá na základní platformu, GetEncoding která podporuje většinu znakových stránek. Rozhraní .NET Framework však nativně podporuje některá kódování. Seznam znakových stránek najdete v tématu Seznam kódování. V .NET Core metoda vrací kódování nativně GetEncoding podporovaná platformou .NET Core. V obou implementacích .NET můžete voláním GetEncodings metody získat pole EncodingInfo objektů, které obsahují informace o všech dostupných kódováních.

Kromě kódování, která jsou nativně dostupná v .NET Core nebo která jsou vnitřně podporována v konkrétní verzi platformy rozhraní .NET Framework, GetEncoding vrátí metoda všechna další kódování, která jsou k dispozici registrací objektu EncodingProvider . Pokud bylo stejné kódování zaregistrováno více EncodingProvider objekty, vrátí tato metoda poslední zaregistrovaný.

V .NET 5 a novějších verzích není název utf-7 znakové stránky podporovaný.

Poznámka

Znakové stránky ANSI se můžou lišit v různých počítačích a můžou se měnit na jednom počítači, což vede k poškození dat. Pro co nejkonzistentnější výsledky byste měli místo konkrétní znakové stránky použít kódování Unicode, například UTF-8 (znaková stránka 65001) nebo UTF-16.

GetEncoding vrátí instanci uloženou v mezipaměti s výchozím nastavením. Konstruktory odvozených tříd byste měli použít k získání instance s různými nastaveními. Třída například poskytuje konstruktor, UTF32Encoding který umožňuje povolit detekci chyb.

Viz také

Platí pro