Encoding.GetEncoding Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Vrátí kódování pro zadanou znakovou stránku.
Přetížení
| Name | Description |
|---|---|
| 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 kódovat, a bajtové sekvence, 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 kódovat, a bajtové sekvence, které nelze dekódovat. |
GetEncoding(Int32)
- Zdroj:
- Encoding.cs
- Zdroj:
- Encoding.cs
- 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) pro použití výchozího 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 není podporována základní platformou.
codepage není podporována základní platformou.
Příklady
Následující příklad získá dvě instance stejného kódování (jeden po znakové stránce a druhý podle názvu) a zkontroluje jejich rovnost.
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 codepagekódování . Pokud codepage je kódová stránka nebo kódování dvoubabajtů znakové sady (DBCS), použije se nejvhodnější náhradní obslužná rutina. V opačném případě se použije náhradní náhradní obslužná rutina. Tyto náhradní obslužné rutiny nemusí být vhodné pro vaši aplikaci. Chcete-li určit náhradní obslužnou rutinu použitou kódováním určeným codepage, můžete volat GetEncoding(Int32, EncoderFallback, DecoderFallback) přetížení.
V rozhraní .NET Framework GetEncoding se metoda spoléhá na základní platformu pro podporu většiny znakových stránek. Rozhraní .NET Framework však nativně podporuje některá kódování. Seznam kódových stránek najdete v tématu Seznam kódování. V .NET Core GetEncoding vrátí metoda kódování nativně podporovaná rozhraním .NET Core. U obou implementací .NET můžete volat metodu GetEncodings , která získá 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ány v konkrétní verzi platformy rozhraní .NET Framework, GetEncoding metoda vrátí jakékoli další kódování, které jsou zpřístupněny registrací objektu EncodingProvider . Pokud bylo stejné kódování registrováno více EncodingProvider objekty, tato metoda vrátí poslední registrované.
Můžete také zadat hodnotu 0 argumentu codepage . Chování se liší mezi rozhraním .NET Framework a .NET Core a novějšími verzemi:
V rozhraní .NET Framework: Vždy vrátí kódování, které odpovídá aktivní znakové stránce systému ve Windows. Toto je stejné kódování vrácené Encoding.Default vlastností.
V .NET Core a novějších verzích: Chování závisí na konfiguraci kódování aplikace:
Není zaregistrovaný žádný zprostředkovatel kódování: Vrátí UTF8Encodinghodnotu , která je stejná jako Encoding.Default.
CodePagesEncodingProvider zaregistrováno:
- Ve Windows vrátí kódování, které odpovídá aktivní znakové stránce systému (stejné jako chování rozhraní .NET Framework).
- Na platformách jiných než Windows vždy vrátí hodnotu UTF8Encoding.
Zaregistrovaný jiný zprostředkovatel: Toto chování je určeno tímto zprostředkovatelem. Podrobnosti najdete v dokumentaci. Pokud je zaregistrováno více zprostředkovatelů, vrátí metoda kódování od posledního registrovaného zprostředkovatele, který zpracovává
codepageargument 0.
Poznámka:
- Některé nepodporované kódové stránky způsobují ArgumentException vyvolání, zatímco jiné způsobují chybu NotSupportedException. Váš kód proto 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 v jednom počítači, což vede k poškození dat. Z tohoto důvodu se nedoporučuje, pokud je aktivní znaková stránka ANSI znakovou stránkou, kódováním a dekódováním dat pomocí výchozí znakové stránky vrácené touto stránkou Encoding.GetEncoding(0) . Pro nejkonzistence výsledků byste měli místo konkrétní znakové stránky použít kódování Unicode, jako je UTF-8 (znaková stránka 65001) nebo UTF-16.
GetEncoding vrátí instanci uloženou v mezipaměti s výchozím nastavením. K získání instance s různými nastaveními byste měli použít konstruktory odvozených tříd. Třída například UTF32Encoding poskytuje konstruktor, který umožňuje povolit detekci chyb.
Viz také
Platí pro
GetEncoding(String)
- Zdroj:
- Encoding.cs
- Zdroj:
- Encoding.cs
- 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
Podkladová platforma nepodporuje znakovou name stránku označenou znakem.
Příklady
Následující příklad získá dvě instance stejného kódování (jeden po znakové stránce a druhý podle názvu) a zkontroluje jejich rovnost.
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 namekódování . Pokud name je kódová stránka nebo kódování dvoubabajtů znakové sady (DBCS), použije se nejvhodnější náhradní obslužná rutina. V opačném případě se použije náhradní náhradní obslužná rutina. Tyto náhradní obslužné rutiny nemusí být vhodné pro vaši aplikaci. Chcete-li určit náhradní obslužnou rutinu použitou kódováním určeným name, můžete volat GetEncoding(String, EncoderFallback, DecoderFallback) přetížení.
V rozhraní .NET Framework GetEncoding se metoda spoléhá na základní platformu pro podporu většiny znakových stránek. Rozhraní .NET Framework však nativně podporuje některá kódování. Seznam kódových stránek najdete v tématu Seznam kódování. V .NET Core GetEncoding vrátí metoda kódování nativně podporovaná rozhraním .NET Core. U obou implementací .NET můžete volat metodu GetEncodings , která získá 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ány v konkrétní verzi platformy rozhraní .NET Framework, GetEncoding metoda vrátí jakékoli další kódování, které jsou zpřístupněny registrací objektu EncodingProvider . Pokud bylo stejné kódování registrováno více EncodingProvider objekty, tato metoda vrátí poslední registrované.
V .NET 5 a novějších verzích se název utf-7 znakové stránky nepodporuje.
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 nejkonzistence výsledků použijte Unicode, například UTF-8 (znaková 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. K získání instance s různými nastaveními byste měli použít konstruktory odvozených tříd. Třída například UTF32Encoding poskytuje konstruktor, který umožňuje povolit detekci chyb.
Viz také
Platí pro
GetEncoding(Int32, EncoderFallback, DecoderFallback)
- Zdroj:
- Encoding.cs
- Zdroj:
- Encoding.cs
- 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 kódovat, a bajtové sekvence, 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) pro použití výchozího kódování.
- encoderFallback
- EncoderFallback
Objekt, který poskytuje proceduru zpracování chyb, pokud znak nelze zakódovat s aktuálním kódováním.
- decoderFallback
- DecoderFallback
Objekt, který poskytuje proceduru zpracování chyb, pokud sekvence 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 není podporována základní platformou.
codepage není podporována základní platformou.
Příklady
Následující příklad ukazuje metodu 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)"
'
Poznámky
Poznámka:
- Některé nepodporované kódové stránky způsobují vyvolání výjimky ArgumentException , zatímco jiné způsobují NotSupportedException. Váš kód proto 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 GetEncoding se metoda spoléhá na základní platformu pro podporu většiny znakových stránek. Rozhraní .NET Framework však nativně podporuje některá kódování. Seznam kódových stránek najdete v tématu Seznam kódování. V .NET Core GetEncoding vrátí metoda kódování nativně podporovaná rozhraním .NET Core. U obou implementací .NET můžete volat metodu GetEncodings , která získá 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ány v konkrétní verzi platformy rozhraní .NET Framework, GetEncoding metoda vrátí jakékoli další kódování, které jsou zpřístupněny registrací objektu EncodingProvider . Pokud bylo stejné kódování registrováno více EncodingProvider objekty, tato metoda vrátí poslední registrované.
Můžete také zadat hodnotu 0 argumentu codepage . Chování se liší mezi rozhraním .NET Framework a .NET Core a novějšími verzemi:
V rozhraní .NET Framework: Vždy vrátí kódování, které odpovídá aktivní znakové stránce systému ve Windows. Toto je stejné kódování vrácené Encoding.Default vlastností.
V .NET Core a novějších verzích: Chování závisí na konfiguraci kódování aplikace:
Není zaregistrovaný žádný zprostředkovatel kódování: Vrátí UTF8Encodinghodnotu , která je stejná jako Encoding.Default.
CodePagesEncodingProvider zaregistrováno:
- Ve Windows vrátí kódování, které odpovídá aktivní znakové stránce systému (stejné jako chování rozhraní .NET Framework).
- Na platformách jiných než Windows vždy vrátí hodnotu UTF8Encoding.
Zaregistrovaný jiný zprostředkovatel: Toto chování je určeno tímto zprostředkovatelem. Podrobnosti najdete v dokumentaci. Pokud je zaregistrováno více zprostředkovatelů, vrátí metoda kódování od posledního registrovaného zprostředkovatele, který zpracovává
codepageargument 0.
Poznámka:
Znakové stránky ANSI se můžou lišit v různých počítačích a můžou se měnit v jednom počítači, což vede k poškození dat. Z tohoto důvodu se nedoporučuje, pokud je aktivní znaková stránka ANSI znakovou stránkou, kódováním a dekódováním dat pomocí výchozí znakové stránky vrácené touto stránkou Encoding.GetEncoding(0) . Pro nejkonzistence výsledků 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í přidružené k aktivní znakové stránce, můžete zadat hodnotu 0 argumentu codepage nebo, pokud kód běží 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. K získání instance s různými nastaveními byste měli použít konstruktory odvozených tříd. Třída například UTF32Encoding poskytuje konstruktor, který umožňuje povolit detekci chyb.
Viz také
Platí pro
GetEncoding(String, EncoderFallback, DecoderFallback)
- Zdroj:
- Encoding.cs
- Zdroj:
- Encoding.cs
- 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 kódovat, a bajtové sekvence, 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 zakódovat s aktuálním kódováním.
- decoderFallback
- DecoderFallback
Objekt, který poskytuje proceduru zpracování chyb, pokud sekvence 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
Podkladová platforma nepodporuje znakovou name stránku označenou znakem.
Příklady
Následující příklad ukazuje metodu 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)"
'
Poznámky
V rozhraní .NET Framework GetEncoding se metoda spoléhá na základní platformu pro podporu většiny znakových stránek. Rozhraní .NET Framework však nativně podporuje některá kódování. Seznam kódových stránek najdete v tématu Seznam kódování. V .NET Core GetEncoding vrátí metoda kódování nativně podporovaná rozhraním .NET Core. U obou implementací .NET můžete volat metodu GetEncodings , která získá 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ány v konkrétní verzi platformy rozhraní .NET Framework, GetEncoding metoda vrátí jakékoli další kódování, které jsou zpřístupněny registrací objektu EncodingProvider . Pokud bylo stejné kódování registrováno více EncodingProvider objekty, tato metoda vrátí poslední registrované.
V .NET 5 a novějších verzích se název utf-7 znakové stránky nepodporuje.
Poznámka:
Znakové stránky ANSI se můžou lišit v různých počítačích a můžou se měnit v jednom počítači, což vede k poškození dat. Pro nejkonzistence výsledků byste měli místo konkrétní znakové stránky použít kódování Unicode, jako je UTF-8 (znaková stránka 65001) nebo UTF-16.
GetEncoding vrátí instanci uloženou v mezipaměti s výchozím nastavením. K získání instance s různými nastaveními byste měli použít konstruktory odvozených tříd. Třída například UTF32Encoding poskytuje konstruktor, který umožňuje povolit detekci chyb.