EncoderExceptionFallback Třída
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í.
Poskytuje mechanismus zpracování selhání označovaný jako záložní znak pro vstupní znak, který nelze převést na výstupní bajtovou sekvenci. Náhradní funkce vyvolá výjimku, pokud vstupní znak nelze převést na výstupní bajtovou sekvenci. Tuto třídu nelze dědit.
public ref class EncoderExceptionFallback sealed : System::Text::EncoderFallback
public sealed class EncoderExceptionFallback : System.Text.EncoderFallback
[System.Serializable]
public sealed class EncoderExceptionFallback : System.Text.EncoderFallback
type EncoderExceptionFallback = class
inherit EncoderFallback
[<System.Serializable>]
type EncoderExceptionFallback = class
inherit EncoderFallback
Public NotInheritable Class EncoderExceptionFallback
Inherits EncoderFallback
- Dědičnost
- Atributy
Příklady
Následující příklad kódu ukazuje EncoderExceptionFallback a EncoderFallbackException třídy.
// This example demonstrates the EncoderExceptionFallback class.
using namespace System;
using namespace System::Text;
int main()
{
// Create an encoding, which is equivalent to calling the
// ASCIIEncoding class constructor.
// The EncoderExceptionFallback parameter causes an exception to
// be thrown when a character cannot be encoded.
// A decoder exception fallback is also specified, but it is not
// used because this example terminates during the encoding operation.
Encoding^ asciiEncoding = Encoding::GetEncoding("us-ascii",
gcnew EncoderExceptionFallback(), gcnew DecoderExceptionFallback());
// 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 cause an exception.
String^ inputString = L"\u00abX\u00bb";
String^ twoNewLines = Environment::NewLine + Environment::NewLine;
array<Byte>^ encodedBytes = gcnew array<Byte>(
asciiEncoding->GetMaxByteCount(inputString->Length));
int numberOfEncodedBytes = 0;
// ---------------------------------------------------------------------
Console::Clear();
// Display the name of the encoding.
Console::WriteLine("The name of the encoding is \"{0}\".{1}",
asciiEncoding->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);
// ---------------------------------------------------------------------
// Attempt to encode the input string. However, an exception is thrown
// before the input string can be encoded.
Console::WriteLine("Encode the input string...");
// The code example terminates during the call to the GetBytes() method.
try
{
numberOfEncodedBytes = asciiEncoding->GetBytes(inputString, 0,
inputString->Length, encodedBytes, 0);
// This statement is never executed.
Console::WriteLine("This statement is never executed.");
}
catch (EncoderFallbackException^ ex)
{
Console::WriteLine(ex);
Console::WriteLine(
"{0}*** THE CODE EXAMPLE TERMINATES HERE AS INTENDED. ***",
Environment::NewLine);
}
}
/*
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...
System.Text.EncoderFallbackException: Unable to translate Unicode character \u00AB at inde
x 0 to specified code page.
at System.Text.EncoderExceptionFallbackBuffer.Fallback(Char charUnknown, Int32 index)
at System.Text.EncoderFallbackBuffer.InternalFallback(Char ch, Char*& chars)
at System.Text.ASCIIEncoding.GetBytes(Char* chars, Int32 charCount, Byte* bytes, Int32
byteCount, EncoderNLS encoder)
at System.Text.ASCIIEncoding.GetBytes(String chars, Int32 charIndex, Int32 charCount, B
yte[] bytes, Int32 byteIndex)
at Sample.Main()
*** THE CODE EXAMPLE TERMINATES HERE AS INTENDED. ***
*/
// This example demonstrates the EncoderExceptionFallback 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 EncoderExceptionFallback parameter causes an exception to
// be thrown when a character cannot be encoded.
// A decoder exception fallback is also specified, but it is not
// used because this example terminates during the encoding operation.
Encoding ae = Encoding.GetEncoding(
"us-ascii",
new EncoderExceptionFallback(),
new DecoderExceptionFallback());
// 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
// cause an exception.
string inputString = "\u00abX\u00bb";
string twoNewLines = "\n\n";
byte[] encodedBytes = new byte[ae.GetMaxByteCount(inputString.Length)];
int numberOfEncodedBytes = 0;
// --------------------------------------------------------------------------
Console.Clear();
// 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);
// --------------------------------------------------------------------------
// Attempt to encode the input string. However, an exception is thrown before
// the input string can be encoded.
Console.WriteLine("Encode the input string...");
// The code example terminates during the call to the GetBytes() method.
try {
numberOfEncodedBytes = ae.GetBytes(inputString, 0, inputString.Length,
encodedBytes, 0);
}
catch (EncoderFallbackException e)
{
Console.WriteLine(e);
Console.WriteLine("\n*** THE CODE EXAMPLE TERMINATES HERE AS INTENDED. ***");
return;
}
// This statement is never executed.
Console.WriteLine("This statement is never executed.");
}
}
/*
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...
System.Text.EncoderFallbackException: Unable to translate Unicode character \u00AB at inde
x 0 to specified code page.
at System.Text.EncoderExceptionFallbackBuffer.Fallback(Char charUnknown, Int32 index)
at System.Text.EncoderFallbackBuffer.InternalFallback(Char ch, Char*& chars)
at System.Text.ASCIIEncoding.GetBytes(Char* chars, Int32 charCount, Byte* bytes, Int32
byteCount, EncoderNLS encoder)
at System.Text.ASCIIEncoding.GetBytes(String chars, Int32 charIndex, Int32 charCount, B
yte[] bytes, Int32 byteIndex)
at Sample.Main()
*** THE CODE EXAMPLE TERMINATES HERE AS INTENDED. ***
*/
' This example demonstrates the EncoderExceptionFallback class.
Imports System.Text
Class Sample
Public Shared Sub Main()
' Create an encoding, which is equivalent to calling the
' ASCIIEncoding class constructor.
' The EncoderExceptionFallback parameter causes an exception to
' be thrown when a character cannot be encoded.
' A decoder exception fallback is also specified, but it is not
' used because this example terminates during the encoding operation.
Dim eef As New EncoderExceptionFallback()
Dim def As New DecoderExceptionFallback()
Dim ae As Encoding = Encoding.GetEncoding("us-ascii", eef, def)
' 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
' cause an exception.
Dim inputString As String = "«X»"
Dim twoNewLines As String = vbCrLf & vbCrLf
Dim numberOfEncodedBytes As Integer = ae.GetMaxByteCount(inputString.Length)
' Counteract the compiler adding an extra element.
Dim encodedBytes(numberOfEncodedBytes - 1) As Byte
' --------------------------------------------------------------------------
Console.Clear()
' 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)
' --------------------------------------------------------------------------
' Attempt to encode the input string. However, an exception is thrown before
' the input string can be encoded.
Console.WriteLine("Encode the input string...")
' The code example terminates during the call to the GetBytes() method.
Try
numberOfEncodedBytes = ae.GetBytes(inputString, 0, inputString.Length, _
encodedBytes, 0)
Catch e As EncoderFallbackException
Console.WriteLine(e)
Console.WriteLine(vbCrLf & _
"*** THE CODE EXAMPLE TERMINATES HERE AS INTENDED. ***")
Return
End Try
' This statement is never executed.
Console.WriteLine("This statement is never executed.")
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...
'System.Text.EncoderFallbackException: Unable to translate Unicode character \u00AB at inde
'x 0 to specified code page.
' at System.Text.EncoderExceptionFallbackBuffer.Fallback(Char charUnknown, Int32 index)
' at System.Text.EncoderFallbackBuffer.InternalFallback(Char ch, Char*& chars)
' at System.Text.ASCIIEncoding.GetBytes(Char* chars, Int32 charCount, Byte* bytes, Int32
'byteCount, EncoderNLS encoder)
' at System.Text.ASCIIEncoding.GetBytes(String chars, Int32 charIndex, Int32 charCount, B
'yte[] bytes, Int32 byteIndex)
' at Sample.Main()
'
'*** THE CODE EXAMPLE TERMINATES HERE AS INTENDED. ***
'
Poznámky
Kódování mapuje znak Unicode na zakódovanou posloupnost bajtů, která se následně dá přenést na fyzické médium, například na disk nebo přes komunikační propojení. Znaky lze mapovat různými způsoby a konkrétní kódování je reprezentováno typem odvozeným z Encoding třídy. Konkrétně metoda typu GetBytes
kódování kóduje znak na bajtovou sekvenci a GetChars
metoda dekóduje bajtovou sekvenci na znak.
Operace kódování může selhat, pokud vstupní znak nemůže být reprezentován kódováním. Například objekt nemůže kódovat znak, ASCIIEncoding který dává hodnotu bodu kódu Unicode, která je mimo rozsah U+0000 až U+007F.
V případech, kdy nelze provést kódování nebo dekódování převodu, .NET Framework poskytuje mechanismus zpracování selhání označovaný jako náhradní. Vaše aplikace může použít předdefinovaný .NET Framework kodér náhradního kodéru nebo může vytvořit vlastní kodér odvozený z EncoderFallback tříd a EncoderFallbackBuffer tříd.
.NET Framework poskytuje dvě předdefinované třídy, které implementují různé záložní strategie pro zpracování chyb převodu kódování. Třída EncoderReplacementFallback nahrazuje řetězec zadaný pro libovolný vstupní znak, který nelze převést. Náhradní řetězec je zakódován místo neplatného znaku a pak operace kódování pokračuje v převodu zbytku vstupu. Naproti tomu EncoderExceptionFallback třída vyvolá EncoderFallbackException , když dojde k neplatnému znaku.
Konstruktory
EncoderExceptionFallback() |
Inicializuje novou instanci EncoderExceptionFallback třídy. |
Vlastnosti
MaxCharCount |
Získá maximální počet znaků, které může tato instance vrátit. |
Metody
CreateFallbackBuffer() |
Vrátí záložní vyrovnávací paměť kodéru, která vyvolá výjimku, pokud nemůže převést posloupnost znaků na bajtovou sekvenci. |
Equals(Object) |
Určuje, zda se aktuální EncoderExceptionFallback objekt a zadaný objekt rovná. |
GetHashCode() |
Načte kód hash pro tuto instanci. |
GetType() |
Type Získá aktuální instanci. (Zděděno od Object) |
MemberwiseClone() |
Vytvoří použádnou kopii aktuálního souboru Object. (Zděděno od Object) |
ToString() |
Vrátí řetězec, který představuje aktuální objekt. (Zděděno od Object) |