Поделиться через


Encoding.GetEncoding Метод

Определение

Возвращает кодировку для указанной кодовой страницы.

Перегрузки

Имя Описание
GetEncoding(Int32)

Возвращает кодировку, связанную с указанным идентификатором кодовой страницы.

GetEncoding(String)

Возвращает кодировку, связанную с указанным именем кодовой страницы.

GetEncoding(Int32, EncoderFallback, DecoderFallback)

Возвращает кодировку, связанную с указанным идентификатором кодовой страницы. Параметры указывают обработчик ошибок для символов, которые не могут быть закодированы и байтовые последовательности, которые не могут быть декодированы.

GetEncoding(String, EncoderFallback, DecoderFallback)

Возвращает кодировку, связанную с указанным именем кодовой страницы. Параметры указывают обработчик ошибок для символов, которые не могут быть закодированы и байтовые последовательности, которые не могут быть декодированы.

GetEncoding(Int32)

Исходный код:
Encoding.cs
Исходный код:
Encoding.cs
Исходный код:
Encoding.cs
Исходный код:
Encoding.cs
Исходный код:
Encoding.cs

Возвращает кодировку, связанную с указанным идентификатором кодовой страницы.

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

Параметры

codepage
Int32

Идентификатор кодовой страницы предпочтительной кодировки. Список возможных значений см. в разделе Encoding.

–или–

0 (ноль), чтобы использовать кодировку по умолчанию.

Возвращаемое значение

Кодировка, связанная с указанной кодовой страницей.

Исключения

codepage меньше нуля или больше 65535.

codepage не поддерживается базовой платформой.

codepage не поддерживается базовой платформой.

Примеры

В следующем примере два экземпляра одной кодировки (одна по кодовой странице и другому по имени) и проверяет их равенство.

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

Комментарии

Резервный обработчик зависит от типа codepageкодирования. Если codepage кодовая страница или кодировка двухбайтовых символов (DBCS) лучше всего подходит для резервного обработчика. В противном случае используется резервный обработчик замены. Эти резервные обработчики могут не соответствовать вашему приложению. Чтобы указать резервный обработчик, используемый кодировкой, указанной в codepageкодировке, можно вызвать перегрузку GetEncoding(Int32, EncoderFallback, DecoderFallback) .

В .NET Framework GetEncoding метод использует базовую платформу для поддержки большинства кодов. Однако платформа .NET Framework изначально поддерживает некоторые кодировки. Список кодовых страниц см. в разделе "Список кодировок". В .NET Core GetEncoding метод возвращает кодировки, которые изначально поддерживаются .NET Core. В обеих реализациях .NET можно вызвать GetEncodings метод для получения массива EncodingInfo объектов, содержащих сведения обо всех доступных кодировках.

В дополнение к кодировкам, которые изначально доступны в .NET Core или которые изначально поддерживаются в определенной версии платформы .NET Framework, GetEncoding метод возвращает все дополнительные кодировки, доступные путем регистрации EncodingProvider объекта. Если одна кодировка зарегистрирована несколькими EncodingProvider объектами, этот метод возвращает последний зарегистрированный.

Можно также указать значение 0 для аргумента codepage . Поведение зависит от .NET Framework и .NET Core и более поздних версий:

В .NET Framework: всегда возвращает кодировку, соответствующую активной кодовой странице системы в Windows. Это та же кодировка, возвращаемая свойством Encoding.Default .

В .NET Core и более поздних версиях поведение зависит от конфигурации кодирования приложения:

  • Поставщик кодирования не зарегистрирован: возвращает значение UTF8Encoding, аналогичное Encoding.Default.

  • CodePagesEncodingProvider зарегистрировано:

    • В Windows возвращает кодировку, соответствующую активной кодовой странице системы (аналогично поведению .NET Framework).
    • На платформах, отличных от Windows, всегда возвращается UTF8Encoding.
  • Другой поставщик зарегистрирован: поведение определяется этим поставщиком. Дополнительные сведения см. в своей документации. Если зарегистрировано несколько поставщиков, метод возвращает кодировку из последнего зарегистрированного поставщика, обрабатывающего codepage аргумент 0.

Замечание

  • Некоторые неподдерживаемые кодовые страницы вызывают ArgumentException исключение, а другие вызывают NotSupportedExceptionисключение. Поэтому код должен перехватывать все исключения, указанные в разделе "Исключения".
  • В .NET 5 и более поздних версиях идентификатор 65000кодовой страницы, представляющий UTF-7, не поддерживается.

Замечание

Кодовые страницы ANSI могут отличаться на разных компьютерах и могут изменяться на одном компьютере, что приводит к повреждению данных. По этой причине, если активная кодовая страница является кодовой страницей ANSI, кодировкой и декодированием данных с помощью кодовой страницы по умолчанию, возвращаемой Encoding.GetEncoding(0) не рекомендуется. Для наиболее согласованных результатов следует использовать кодировку Юникода, например UTF-8 (кодовая страница 65001) или UTF-16, а не определенную кодовую страницу.

GetEncoding возвращает кэшированный экземпляр с параметрами по умолчанию. Конструкторы производных классов следует использовать для получения экземпляра с разными параметрами. Например, UTF32Encoding класс предоставляет конструктор, позволяющий включить обнаружение ошибок.

См. также раздел

Применяется к

GetEncoding(String)

Исходный код:
Encoding.cs
Исходный код:
Encoding.cs
Исходный код:
Encoding.cs
Исходный код:
Encoding.cs
Исходный код:
Encoding.cs

Возвращает кодировку, связанную с указанным именем кодовой страницы.

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

Параметры

name
String

Имя кодовой страницы предпочтительной кодировки. Любое значение, возвращаемое свойством WebName , допустимо. Список возможных значений см. в разделе Encoding.

Возвращаемое значение

Кодировка, связанная с указанной кодовой страницей.

Исключения

name не является допустимым именем кодовой страницы.

–или–

Кодовая страница, name указанная не поддерживается базовой платформой.

Примеры

В следующем примере два экземпляра одной кодировки (одна по кодовой странице и другому по имени) и проверяет их равенство.

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

Комментарии

Резервный обработчик зависит от типа nameкодирования. Если name кодовая страница или кодировка двухбайтовых символов (DBCS) лучше всего подходит для резервного обработчика. В противном случае используется резервный обработчик замены. Эти резервные обработчики могут не соответствовать вашему приложению. Чтобы указать резервный обработчик, используемый кодировкой, указанной в nameкодировке, можно вызвать перегрузку GetEncoding(String, EncoderFallback, DecoderFallback) .

В .NET Framework GetEncoding метод использует базовую платформу для поддержки большинства кодов. Однако платформа .NET Framework изначально поддерживает некоторые кодировки. Список кодовых страниц см. в разделе "Список кодировок". В .NET Core GetEncoding метод возвращает кодировки, которые изначально поддерживаются .NET Core. В обеих реализациях .NET можно вызвать GetEncodings метод для получения массива EncodingInfo объектов, содержащих сведения обо всех доступных кодировках.

В дополнение к кодировкам, которые изначально доступны в .NET Core или которые изначально поддерживаются в определенной версии платформы .NET Framework, GetEncoding метод возвращает все дополнительные кодировки, доступные путем регистрации EncodingProvider объекта. Если одна кодировка зарегистрирована несколькими EncodingProvider объектами, этот метод возвращает последний зарегистрированный.

В .NET 5 и более поздних версиях имя utf-7 кодовой страницы не поддерживается.

Замечание

Кодовые страницы ANSI могут отличаться на разных компьютерах или могут быть изменены для одного компьютера, что приводит к повреждению данных. Для наиболее согласованных результатов используйте Юникод, например UTF-8 (кодовая страница 65001) или UTF-16, а не определенную кодовую страницу.

GetEncoding возвращает кэшированный экземпляр с параметрами по умолчанию. Конструкторы производных классов следует использовать для получения экземпляра с разными параметрами. Например, UTF32Encoding класс предоставляет конструктор, позволяющий включить обнаружение ошибок.

См. также раздел

Применяется к

GetEncoding(Int32, EncoderFallback, DecoderFallback)

Исходный код:
Encoding.cs
Исходный код:
Encoding.cs
Исходный код:
Encoding.cs
Исходный код:
Encoding.cs
Исходный код:
Encoding.cs

Возвращает кодировку, связанную с указанным идентификатором кодовой страницы. Параметры указывают обработчик ошибок для символов, которые не могут быть закодированы и байтовые последовательности, которые не могут быть декодированы.

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

Параметры

codepage
Int32

Идентификатор кодовой страницы предпочтительной кодировки. Список возможных значений см. в разделе Encoding.

–или–

0 (ноль), чтобы использовать кодировку по умолчанию.

encoderFallback
EncoderFallback

Объект, предоставляющий процедуру обработки ошибок, если символ не может быть закодирован с помощью текущей кодировки.

decoderFallback
DecoderFallback

Объект, предоставляющий процедуру обработки ошибок, когда последовательность байтов не может быть декодирована с помощью текущей кодировки.

Возвращаемое значение

Кодировка, связанная с указанной кодовой страницей.

Исключения

codepage меньше нуля или больше 65535.

codepage не поддерживается базовой платформой.

codepage не поддерживается базовой платформой.

Примеры

В следующем примере демонстрируется Encoding.GetEncoding(String, EncoderFallback, DecoderFallback) метод.

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

Комментарии

Замечание

  • Некоторые неподдерживаемые кодовые страницы вызывают исключение ArgumentException , в то время как другие вызывают исключение NotSupportedException. Поэтому код должен перехватывать все исключения, указанные в разделе "Исключения".
  • В .NET 5 и более поздних версиях идентификатор 65000кодовой страницы, представляющий UTF-7, не поддерживается.

В .NET Framework GetEncoding метод использует базовую платформу для поддержки большинства кодов. Однако платформа .NET Framework изначально поддерживает некоторые кодировки. Список кодовых страниц см. в разделе "Список кодировок". В .NET Core GetEncoding метод возвращает кодировки, которые изначально поддерживаются .NET Core. В обеих реализациях .NET можно вызвать GetEncodings метод для получения массива EncodingInfo объектов, содержащих сведения обо всех доступных кодировках.

В дополнение к кодировкам, которые изначально доступны в .NET Core или которые изначально поддерживаются в определенной версии платформы .NET Framework, GetEncoding метод возвращает все дополнительные кодировки, доступные путем регистрации EncodingProvider объекта. Если одна кодировка зарегистрирована несколькими EncodingProvider объектами, этот метод возвращает последний зарегистрированный.

Можно также указать значение 0 для аргумента codepage . Поведение зависит от .NET Framework и .NET Core и более поздних версий:

В .NET Framework: всегда возвращает кодировку, соответствующую активной кодовой странице системы в Windows. Это та же кодировка, возвращаемая свойством Encoding.Default .

В .NET Core и более поздних версиях поведение зависит от конфигурации кодирования приложения:

  • Поставщик кодирования не зарегистрирован: возвращает значение UTF8Encoding, аналогичное Encoding.Default.

  • CodePagesEncodingProvider зарегистрировано:

    • В Windows возвращает кодировку, соответствующую активной кодовой странице системы (аналогично поведению .NET Framework).
    • На платформах, отличных от Windows, всегда возвращается UTF8Encoding.
  • Другой поставщик зарегистрирован: поведение определяется этим поставщиком. Дополнительные сведения см. в своей документации. Если зарегистрировано несколько поставщиков, метод возвращает кодировку из последнего зарегистрированного поставщика, обрабатывающего codepage аргумент 0.

Замечание

Кодовые страницы ANSI могут отличаться на разных компьютерах и могут изменяться на одном компьютере, что приводит к повреждению данных. По этой причине, если активная кодовая страница является кодовой страницей ANSI, кодировкой и декодированием данных с помощью кодовой страницы по умолчанию, возвращаемой Encoding.GetEncoding(0) не рекомендуется. Для наиболее согласованных результатов следует использовать Юникод, например UTF-8 (кодовая страница 65001) или UTF-16, а не определенную кодовую страницу.

Чтобы получить кодировку, связанную с активной кодовой страницей, можно указать значение 0 для codepage аргумента или, если код выполняется в .NET Framework, получите значение Encoding.Default свойства. Чтобы определить текущую активную кодовую страницу, вызовите функцию Windows GetACP из .NET Framework.

GetEncoding возвращает кэшированный экземпляр с параметрами по умолчанию. Конструкторы производных классов следует использовать для получения экземпляра с разными параметрами. Например, UTF32Encoding класс предоставляет конструктор, позволяющий включить обнаружение ошибок.

См. также раздел

Применяется к

GetEncoding(String, EncoderFallback, DecoderFallback)

Исходный код:
Encoding.cs
Исходный код:
Encoding.cs
Исходный код:
Encoding.cs
Исходный код:
Encoding.cs
Исходный код:
Encoding.cs

Возвращает кодировку, связанную с указанным именем кодовой страницы. Параметры указывают обработчик ошибок для символов, которые не могут быть закодированы и байтовые последовательности, которые не могут быть декодированы.

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

Параметры

name
String

Имя кодовой страницы предпочтительной кодировки. Любое значение, возвращаемое свойством WebName , допустимо. Возможные значения перечислены в столбце "Имя" таблицы, которая отображается в Encoding разделе класса.

encoderFallback
EncoderFallback

Объект, предоставляющий процедуру обработки ошибок, если символ не может быть закодирован с помощью текущей кодировки.

decoderFallback
DecoderFallback

Объект, предоставляющий процедуру обработки ошибок, когда последовательность байтов не может быть декодирована с помощью текущей кодировки.

Возвращаемое значение

Кодировка, связанная с указанной кодовой страницей.

Исключения

name не является допустимым именем кодовой страницы.

–или–

Кодовая страница, name указанная не поддерживается базовой платформой.

Примеры

В следующем примере демонстрируется Encoding.GetEncoding(String, EncoderFallback, DecoderFallback) метод.

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

Комментарии

В .NET Framework GetEncoding метод использует базовую платформу для поддержки большинства кодов. Однако платформа .NET Framework изначально поддерживает некоторые кодировки. Список кодовых страниц см. в разделе "Список кодировок". В .NET Core GetEncoding метод возвращает кодировки, которые изначально поддерживаются .NET Core. В обеих реализациях .NET можно вызвать GetEncodings метод для получения массива EncodingInfo объектов, содержащих сведения обо всех доступных кодировках.

В дополнение к кодировкам, которые изначально доступны в .NET Core или которые изначально поддерживаются в определенной версии платформы .NET Framework, GetEncoding метод возвращает все дополнительные кодировки, доступные путем регистрации EncodingProvider объекта. Если одна кодировка зарегистрирована несколькими EncodingProvider объектами, этот метод возвращает последний зарегистрированный.

В .NET 5 и более поздних версиях имя utf-7 кодовой страницы не поддерживается.

Замечание

Кодовые страницы ANSI могут отличаться на разных компьютерах и могут изменяться на одном компьютере, что приводит к повреждению данных. Для наиболее согласованных результатов следует использовать кодировку Юникода, например UTF-8 (кодовая страница 65001) или UTF-16, а не определенную кодовую страницу.

GetEncoding возвращает кэшированный экземпляр с параметрами по умолчанию. Конструкторы производных классов следует использовать для получения экземпляра с разными параметрами. Например, UTF32Encoding класс предоставляет конструктор, позволяющий включить обнаружение ошибок.

См. также раздел

Применяется к