EncoderReplacementFallback 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 ein Eingabezeichen, das nicht in eine Ausgabebytesequenz konvertiert werden kann. Im Fallback wird anstelle des ursprünglichen Eingabezeichens eine vom Benutzer angegebene Ersetzungszeichenfolge verwendet. Diese Klasse kann nicht vererbt werden.
public ref class EncoderReplacementFallback sealed : System::Text::EncoderFallback
public sealed class EncoderReplacementFallback : System.Text.EncoderFallback
[System.Serializable]
public sealed class EncoderReplacementFallback : System.Text.EncoderFallback
type EncoderReplacementFallback = class
inherit EncoderFallback
[<System.Serializable>]
type EncoderReplacementFallback = class
inherit EncoderFallback
Public NotInheritable Class EncoderReplacementFallback
Inherits EncoderFallback
- Vererbung
- Attribute
Beispiele
Im folgenden Beispiel wird die EncoderReplacementFallback Klasse veranschaulicht.
// 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)"
'
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 z. B. kein Zeichen mit einem Unicode-Codepunktwert codieren, ASCIIEncoding der sich außerhalb des Bereichs U+0000 auf U+007F befindet. Wenn das Eingabezeichen nicht in eine Ausgabebytesequenz konvertiert werden kann, ersetzt ein EncoderReplacementFallback Objekt eine angegebene Ersetzungszeichenfolge für das ursprüngliche Eingabezeichen. Der Konvertierungsprozess codiert die Ersetzungszeichenfolge und verarbeitet dann den Rest der ursprünglichen Eingabe.
Die von einem EncoderReplacementFallback Objekt verwendete Ersetzungszeichenfolge wird durch den Aufruf des Klassenkonstruktors bestimmt. Es stehen zwei Optionen zur Verfügung:
Ersetzung mit dem Standardzeichen. Wenn Sie den EncoderReplacementFallback() Konstruktor aufrufen, lautet das Ersetzungszeichen "?" (U+003F).
Ersetzung mit einer Zeichenfolge Ihrer Wahl. Wenn Sie den EncoderReplacementFallback(String) Konstruktor aufrufen, geben Sie die Ersetzungszeichenfolge an.
Wenn Sie eine Fallbackzeichenfolge für diese Klasse auswählen, stellen Sie sicher, dass die Zeichenfolge vollständig aus Zeichen besteht, die in der Zielcodierung codiert werden können. Andernfalls führt ein rekursiver Fallback zu einer ArgumentException.
Diese Klasse ist eine von zwei .NET Framework-Klassen, die verschiedene Fallbackstrategien für die Behandlung von Codierungskonvertierungsfehlern implementieren. Die andere Klasse ist die EncoderExceptionFallback Klasse, die beim Auftreten eines ungültigen Zeichens eingibt EncoderFallbackException .
Konstruktoren
| Name | Beschreibung |
|---|---|
| EncoderReplacementFallback() |
Initialisiert eine neue Instanz der EncoderReplacementFallback-Klasse. |
| EncoderReplacementFallback(String) |
Initialisiert eine neue Instanz der EncoderReplacementFallback Klasse mithilfe einer angegebenen Ersetzungszeichenfolge. |
Eigenschaften
| Name | Beschreibung |
|---|---|
| DefaultString |
Ruft die Ersetzungszeichenfolge, die den Wert des EncoderReplacementFallback Objekts darstellt. |
| MaxCharCount |
Ruft die Anzahl der Zeichen in der Ersetzungszeichenfolge für das EncoderReplacementFallback Objekt ab. |
Methoden
| Name | Beschreibung |
|---|---|
| CreateFallbackBuffer() |
Erstellt ein EncoderFallbackBuffer Objekt, das mit der Ersetzungszeichenfolge dieses EncoderReplacementFallback Objekts initialisiert wird. |
| Equals(Object) |
Gibt an, ob der Wert eines angegebenen Objekts dem Objekt entspricht EncoderReplacementFallback . |
| GetHashCode() |
Ruft den Hashcode für den Wert des EncoderReplacementFallback 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) |