EncoderExceptionFallback Klas
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
Biedt een mechanisme voor foutafhandeling, een terugval genoemd, voor een invoerteken dat niet kan worden geconverteerd naar een bytevolgorde voor uitvoer. De terugval genereert een uitzondering als een invoerteken niet kan worden geconverteerd naar een bytevolgorde voor uitvoer. Deze klasse kan niet worden overgenomen.
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
- Overname
- Kenmerken
Voorbeelden
In het volgende codevoorbeeld ziet u de EncoderExceptionFallback en EncoderFallbackException klassen.
// 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. ***
'
Opmerkingen
Een codering wijst een Unicode-teken toe aan een gecodeerde reeks bytes, die vervolgens kunnen worden overgebracht naar een fysiek medium, zoals een schijf of via een communicatiekoppeling. Tekens kunnen op verschillende manieren worden toegewezen en een bepaalde codering wordt vertegenwoordigd door een type dat is afgeleid van de Encoding klasse. Met name codeert de methode van GetBytes het coderingstype een teken naar een bytereeks en de GetChars methode decodeert een bytereeks naar een teken.
Een coderingsbewerking kan mislukken als het invoerteken niet kan worden vertegenwoordigd door de codering. Een ASCIIEncoding object kan bijvoorbeeld geen teken coderen dat een Unicode-codepuntwaarde oplevert die buiten het bereik U+0000 tot U+0007F valt.
In gevallen waarin een coderings- of decoderingsconversie niet kan worden uitgevoerd, biedt .NET Framework een mechanisme voor foutafhandeling dat een terugval wordt genoemd. Uw toepassing kan gebruikmaken van de vooraf gedefinieerde .NET Framework-coderingsprogramma-terugval, of kan een aangepaste encoderback maken die is afgeleid van de klassen EncoderFallback en EncoderFallbackBuffer.
.NET Framework biedt twee vooraf gedefinieerde klassen die verschillende terugvalstrategieën implementeren voor het afhandelen van coderingsfouten. De EncoderReplacementFallback klasse vervangt een tekenreeks die is opgegeven voor invoertekens die niet kunnen worden geconverteerd. De vervangende tekenreeks wordt gecodeerd in plaats van het ongeldige teken, waarna de coderingsbewerking de rest van de invoer blijft converteren. De klasse genereert daarentegen EncoderExceptionFallback een EncoderFallbackException wanneer er een ongeldig teken wordt aangetroffen.
Constructors
| Name | Description |
|---|---|
| EncoderExceptionFallback() |
Initialiseert een nieuw exemplaar van de EncoderExceptionFallback klasse. |
Eigenschappen
| Name | Description |
|---|---|
| MaxCharCount |
Hiermee haalt u het maximum aantal tekens op dat door dit exemplaar kan worden geretourneerd. |
Methoden
| Name | Description |
|---|---|
| CreateFallbackBuffer() |
Retourneert een terugvalbuffer van een encoder die een uitzondering genereert als een tekenreeks niet kan worden geconverteerd naar een bytereeks. |
| Equals(Object) |
Geeft aan of het huidige EncoderExceptionFallback object en een opgegeven object gelijk zijn. |
| GetHashCode() |
Haalt de hash-code voor dit exemplaar op. |
| GetType() |
Hiermee haalt u de Type huidige instantie op. (Overgenomen van Object) |
| MemberwiseClone() |
Hiermee maakt u een ondiepe kopie van de huidige Object. (Overgenomen van Object) |
| ToString() |
Retourneert een tekenreeks die het huidige object vertegenwoordigt. (Overgenomen van Object) |