DecoderReplacementFallback Klasse
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Stellt einen Fehlerbehandlungsmechanismus bereit, der als Fallback bezeichnet wird, für eine codierte Eingabebytesequenz, die nicht in ein Ausgabezeichen konvertiert werden kann. Der Fallback gibt eine vom Benutzer angegebene Ersetzungszeichenfolge anstelle einer decodierten Eingabebytesequenz aus. Diese Klasse kann nicht vererbt werden.
public ref class DecoderReplacementFallback sealed : System::Text::DecoderFallback
public sealed class DecoderReplacementFallback : System.Text.DecoderFallback
[System.Serializable]
public sealed class DecoderReplacementFallback : System.Text.DecoderFallback
type DecoderReplacementFallback = class
inherit DecoderFallback
[<System.Serializable>]
type DecoderReplacementFallback = class
inherit DecoderFallback
Public NotInheritable Class DecoderReplacementFallback
Inherits DecoderFallback
- Vererbung
- Attribute
Beispiele
Im folgenden Codebeispiel wird die DecoderReplacementFallback Klasse veranschaulicht.
// This example demonstrates the DecoderReplacementFallback 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 DecoderReplacementFallback parameter specifies that the
// string "(error)" is to replace characters that cannot be decoded.
// An encoder replacement fallback is also specified, but in this code
// example the encoding operation cannot fail.
Encoding ae = Encoding.GetEncoding(
"us-ascii",
new EncoderReplacementFallback("(unknown)"),
new DecoderReplacementFallback("(error)"));
string inputString = "XYZ";
string decodedString;
string twoNewLines = "\n\n";
byte[] encodedBytes = new byte[ae.GetByteCount(inputString)];
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);
// --------------------------------------------------------------------------
// 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);
foreach (byte b in encodedBytes)
{
Console.Write("0x{0:X2} ", (int)b);
}
Console.Write(twoNewLines);
// --------------------------------------------------------------------------
// Replace the encoded byte sequences for the characters 'X' and 'Z' with the
// value 0xFF, which is outside the valid range of 0x00 to 0x7F for
// ASCIIEncoding. The resulting byte sequence is actually the beginning of
// this code example because it is the input to the decoder operation, and
// is equivalent to a corrupted or improperly encoded byte sequence.
encodedBytes[0] = 0xFF;
encodedBytes[2] = 0xFF;
Console.WriteLine("Display the corrupted byte sequence...");
Console.WriteLine("Encoded bytes in hexadecimal ({0} bytes):\n",
numberOfEncodedBytes);
foreach (byte b in encodedBytes)
{
Console.Write("0x{0:X2} ", (int)b);
}
Console.Write(twoNewLines);
// --------------------------------------------------------------------------
// Decode the encoded bytes.
Console.WriteLine("Compare the decoded bytes to the input string...");
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): "XYZ"
Input string in hexadecimal: 0x58 0x59 0x5A
Encode the input string...
Encoded bytes in hexadecimal (3 bytes):
0x58 0x59 0x5A
Display the corrupted byte sequence...
Encoded bytes in hexadecimal (3 bytes):
0xFF 0x59 0xFF
Compare the decoded bytes to the input string...
Input string: "XYZ"
Decoded string:"(error)Y(error)"
*/
' This example demonstrates the DecoderReplacementFallback class.
Imports System.Text
Class Sample
Public Shared Sub Main()
' Create an encoding, which is equivalent to calling the
' ASCIIEncoding class constructor.
' The DecoderReplacementFallback parameter specifies that the
' string "(error)" is to replace characters that cannot be decoded.
' An encoder replacement fallback is also specified, but in this code
' example the encoding 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)
Dim inputString As String = "XYZ"
Dim decodedString As String
Dim twoNewLines As String = vbCrLf & vbCrLf
Dim numberOfEncodedBytes As Integer = ae.GetByteCount(inputString)
' Counteract the compiler implicitly 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)
' --------------------------------------------------------------------------
' 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)
Dim b As Byte
For Each b In encodedBytes
Console.Write("0x{0:X2} ", Convert.ToInt32(b))
Next b
Console.Write(twoNewLines)
' --------------------------------------------------------------------------
' Replace the encoded byte sequences for the characters 'X' and 'Z' with the
' value 0xFF, which is outside the valid range of 0x00 to 0x7F for
' ASCIIEncoding. The resulting byte sequence is actually the beginning of
' this code example because it is the input to the decoder operation, and
' is equivalent to a corrupted or improperly encoded byte sequence.
encodedBytes(0) = &HFF
encodedBytes(2) = &HFF
Console.WriteLine("Display the corrupted byte sequence...")
Console.WriteLine("Encoded bytes in hexadecimal ({0} bytes):" & vbCrLf, _
numberOfEncodedBytes)
For Each b In encodedBytes
Console.Write("0x{0:X2} ", Convert.ToInt32(b))
Next b
Console.Write(twoNewLines)
' --------------------------------------------------------------------------
' Decode the encoded bytes.
Console.WriteLine("Compare the decoded bytes to the input string...")
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): "XYZ"
'Input string in hexadecimal: 0x58 0x59 0x5A
'
'Encode the input string...
'Encoded bytes in hexadecimal (3 bytes):
'
'0x58 0x59 0x5A
'
'Display the corrupted byte sequence...
'Encoded bytes in hexadecimal (3 bytes):
'
'0xFF 0x59 0xFF
'
'Compare the decoded bytes to the input string...
'Input string: "XYZ"
'Decoded string:"(error)Y(error)"
'
Hinweise
Ein häufiger Grund für einen Fehler bei einem Codierungs- oder Decodierungsvorgang ist, wenn die zugrunde liegende Codierungsklasse keine Zuordnung zwischen einem Zeichen und einer entsprechenden Bytesequenz bereitstellt. Ein Objekt kann beispielsweise einen Bytewert nicht decodieren, ASCIIEncoding der größer als 0x7F ist. Wenn eine Eingabebytesequenz nicht in ein Ausgabezeichen konvertiert werden kann, gibt ein DecoderReplacementFallback Objekt eine Ersetzungszeichenfolge in die Ausgabe aus, um die ursprüngliche Eingabebytesequenz darzustellen. Der Konvertierungsprozess decodiert dann weiterhin den Rest der ursprünglichen Eingabe.
Die von einem DecoderReplacementFallback Objekt verwendete Ersetzungszeichenfolge wird durch den Aufruf des Klassenkonstruktors bestimmt. Es stehen zwei Optionen zur Verfügung:
Ersetzung mit dem Standardzeichen. Wenn Sie den DecoderReplacementFallback() Konstruktor aufrufen, lautet das Ersetzungszeichen "?" (U+003F).
Ersetzung mit einer Zeichenfolge Ihrer Wahl. Wenn Sie den DecoderReplacementFallback(String) Konstruktor aufrufen, geben Sie die Ersetzungszeichenfolge an.
Diese Klasse ist eine von zwei .NET Framework-Klassen, die verschiedene Fallbackstrategien für die Behandlung von Decodierungskonvertierungsfehlern implementieren. Die andere Klasse ist die DecoderExceptionFallback Klasse, die eine DecoderFallbackException Ausgelöst wird, wenn eine ungültige Bytesequenz gefunden wird.
Konstruktoren
| Name | Beschreibung |
|---|---|
| DecoderReplacementFallback() |
Initialisiert eine neue Instanz der DecoderReplacementFallback-Klasse. |
| DecoderReplacementFallback(String) |
Initialisiert eine neue Instanz der DecoderReplacementFallback Klasse mithilfe einer angegebenen Ersetzungszeichenfolge. |
Eigenschaften
| Name | Beschreibung |
|---|---|
| DefaultString |
Ruft die Ersetzungszeichenfolge, die den Wert des DecoderReplacementFallback Objekts darstellt. |
| MaxCharCount |
Ruft die Anzahl der Zeichen in der Ersetzungszeichenfolge für das DecoderReplacementFallback Objekt ab. |
Methoden
| Name | Beschreibung |
|---|---|
| CreateFallbackBuffer() |
Erstellt ein DecoderFallbackBuffer Objekt, das mit der Ersetzungszeichenfolge dieses DecoderReplacementFallback Objekts initialisiert wird. |
| Equals(Object) |
Gibt an, ob der Wert eines angegebenen Objekts dem Objekt entspricht DecoderReplacementFallback . |
| GetHashCode() |
Ruft den Hashcode für den Wert des DecoderReplacementFallback Objekts ab. |
| GetType() |
Ruft die Type der aktuellen Instanz ab. (Geerbt von Object) |
| MemberwiseClone() |
Erstellt eine flache Kopie der aktuellen Object. (Geerbt von Object) |
| ToString() |
Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt. (Geerbt von Object) |