Encoding.GetEncoding Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Возвращает кодировку для указанной кодовой страницы.
Перегрузки
GetEncoding(Int32) |
Возвращает кодировку, связанную с указанным идентификатором кодовой страницы. |
GetEncoding(String) |
Возвращает кодировку, связанную с указанным именем кодовой страницы. |
GetEncoding(Int32, EncoderFallback, DecoderFallback) |
Возвращает кодировку, связанную с указанным идентификатором кодовой страницы. С помощью параметров задается обработчик ошибок для символов, которые не удается закодировать, и последовательностей байтов, которые не удается декодировать. |
GetEncoding(String, EncoderFallback, DecoderFallback) |
Возвращает кодировку, связанную с указанным именем кодовой страницы. С помощью параметров задается обработчик ошибок для символов, которые не удается закодировать, и последовательностей байтов, которые не удается декодировать. |
GetEncoding(Int32)
- Исходный код:
- 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
меньше нуля или больше 65 535.
codepage
не поддерживается используемой платформой.
codepage
не поддерживается используемой платформой.
Примеры
В следующем примере выполняется получение двух экземпляров одной кодировки (по одной кодовой странице и другой по имени) и проверка их равенства.
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
Комментарии
Резервный обработчик зависит от типа кодировки 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
. Точное поведение зависит от того, были ли доступны кодировки путем регистрации EncodingProvider объекта.
Если один или несколько поставщиков кодировок зарегистрированы, возвращается кодировка последнего зарегистрированного поставщика, который выбрал для возврата кодировки, когда GetEncoding методу передается аргумент,
codepage
равный 0.В .NET Framework, если поставщик кодирования не зарегистрирован, если CodePagesEncodingProvider является зарегистрированным поставщиком кодирования или если ни один зарегистрированный поставщик кодировок не обрабатывает
codepage
значение 0, возвращается активная кодовая страница операционной системы. Чтобы определить активную кодовую страницу в системах Windows, вызовите функцию Windows GetACP из платформа .NET Framework.В .NET Core, если поставщик кодирования не зарегистрирован или если ни один зарегистрированный поставщик кодировок не обрабатывает
codepage
значение 0, возвращается UTF8Encoding .
Примечание
- Некоторые неподдерживаемые кодовые страницы вызывают ArgumentException исключение, а другие вызывают NotSupportedException . Поэтому код должен перехватывать все исключения, указанные в разделе исключения.
- В .NET 5 и более поздних версиях идентификатор
65000
кодовой страницы, представляющий UTF-7, не поддерживается.
Примечание
Кодовые страницы ANSI могут различаться на разных компьютерах и могут изменяться на одном компьютере, что приводит к повреждению данных. По этой причине, если активная кодовая страница является кодовой страницей ANSI, кодирование и декодирование данных с помощью кодовой страницы по умолчанию, возвращенной, Encoding.GetEncoding(0)
не рекомендуется. Для наиболее последовательных результатов следует использовать кодировку Юникода, такую как UTF-8 (кодовая страница 65001) или UTF-16, а не конкретную кодовую страницу.
GetEncodingВозвращает кэшированный экземпляр с параметрами по умолчанию. Для получения экземпляра с разными параметрами следует использовать конструкторы производных классов. Например, UTF32Encoding класс предоставляет конструктор, позволяющий включить обнаружение ошибок.
См. также раздел
- CodePage
- EncoderFallback
- EncoderFallback
- GetEncodings()
- Использование классов кодировки символов в .NET
Применяется к
GetEncoding(String)
- Исходный код:
- 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 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
Комментарии
Резервный обработчик зависит от типа кодировки 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
Возвращает кодировку, связанную с указанным идентификатором кодовой страницы. С помощью параметров задается обработчик ошибок для символов, которые не удается закодировать, и последовательностей байтов, которые не удается декодировать.
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
меньше нуля или больше 65 535.
codepage
не поддерживается используемой платформой.
codepage
не поддерживается используемой платформой.
Примеры
В следующем примере демонстрируется 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)"
'
Комментарии
Примечание
- Некоторые неподдерживаемые кодовые страницы приводят к возникновению исключения 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
. Точное поведение зависит от того, были ли доступны кодировки путем регистрации EncodingProvider объекта.
Если один или несколько поставщиков кодировок зарегистрированы, возвращается кодировка последнего зарегистрированного поставщика, который выбрал для возврата кодировки, когда GetEncoding методу передается аргумент,
codepage
равный 0.В .NET Framework, если поставщик кодирования не зарегистрирован, если CodePagesEncodingProvider является зарегистрированным поставщиком кодирования или если ни один зарегистрированный поставщик кодировок не обрабатывает
codepage
значение 0, возвращается активная кодовая страница.В .NET Core, если поставщик кодирования не зарегистрирован или если ни один зарегистрированный поставщик кодировок не обрабатывает
codepage
значение 0, возвращается UTF8Encoding Кодировка.
Примечание
Кодовые страницы ANSI могут различаться на разных компьютерах и могут изменяться на одном компьютере, что приводит к повреждению данных. По этой причине, если активная кодовая страница является кодовой страницей ANSI, кодирование и декодирование данных с помощью кодовой страницы по умолчанию, возвращенной, Encoding.GetEncoding(0)
не рекомендуется. Для наиболее последовательных результатов следует использовать Юникод, например UTF-8 (кодовая страница 65001) или UTF-16, а не конкретную кодовую страницу.
Чтобы получить кодировку, связанную с активной кодовой страницей, можно указать значение 0 для codepage
аргумента или, если код выполняется на платформа .NET Framework, получить значение Encoding.Default свойства . Чтобы определить текущую активную кодовую страницу, вызовите функцию Windows GetACP из платформа .NET Framework.
GetEncodingВозвращает кэшированный экземпляр с параметрами по умолчанию. Для получения экземпляра с разными параметрами следует использовать конструкторы производных классов. Например, UTF32Encoding класс предоставляет конструктор, позволяющий включить обнаружение ошибок.
См. также раздел
- CodePage
- EncoderFallback
- EncoderFallback
- GetEncodings()
- Использование классов кодировки символов в .NET
Применяется к
GetEncoding(String, EncoderFallback, DecoderFallback)
- Исходный код:
- 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 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)"
'
Комментарии
В .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 класс предоставляет конструктор, позволяющий включить обнаружение ошибок.