EncoderReplacementFallback Klasa
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Zapewnia mechanizm obsługi błędów nazywany rezerwą dla znaku wejściowego, którego nie można przekonwertować na sekwencję bajtów wyjściowych. Rezerwowy używa ciągu zastępczego określonego przez użytkownika zamiast oryginalnego znaku wejściowego. Klasa ta nie może być dziedziczona.
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
- Dziedziczenie
- Atrybuty
Przykłady
W poniższym przykładzie pokazano klasę EncoderReplacementFallback .
// This example demonstrates the EncoderReplacementFallback class.
using namespace System;
using namespace System::Text;
int 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^ ascii = Encoding::GetEncoding("us-ascii",
gcnew EncoderReplacementFallback("(unknown)"),
gcnew 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 = Environment::NewLine + Environment::NewLine;
array <Byte>^ encodedBytes =
gcnew array<Byte>(ascii->GetByteCount(inputString));
int numberOfEncodedBytes = 0;
// ---------------------------------------------------------------------
// Display the name of the encoding.
Console::WriteLine("The name of the encoding is \"{0}\".{1}",
ascii->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);
// ---------------------------------------------------------------------
// Encode the input string.
Console::WriteLine("Encode the input string...");
numberOfEncodedBytes = ascii->GetBytes(inputString, 0, inputString->Length,
encodedBytes, 0);
// Display the encoded bytes.
Console::WriteLine("Encoded bytes in hexadecimal ({0} bytes):{1}",
numberOfEncodedBytes, Environment::NewLine);
for(int i = 0; i < encodedBytes->Length; i++)
{
Console::Write("0x{0:X2} ", encodedBytes[i]);
if(((i + 1) % 6) == 0)
{
Console::WriteLine();
}
}
Console::Write(twoNewLines);
// ---------------------------------------------------------------------
// Decode the encoded bytes, yielding a reconstituted string.
Console::WriteLine("Decode the encoded bytes...");
decodedString = ascii->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.
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)"
'
Uwagi
Typowym powodem niepowodzenia operacji kodowania lub dekodowania jest to, że podstawowa klasa kodowania nie zapewnia mapowania między znakiem a równoważną sekwencją bajtów. Na przykład ASCIIEncoding obiekt nie może kodować znaku o wartości punktu kodu Unicode znajdującej się poza zakresem U+0000 do U+007F. Jeśli nie można przekonwertować znaku wejściowego na sekwencję bajtów wyjściowych, EncoderReplacementFallback obiekt zastępuje określony ciąg zastępczy oryginalnego znaku wejściowego. Proces konwersji koduje ciąg zastępczy, a następnie kontynuuje przetwarzanie reszty oryginalnych danych wejściowych.
Ciąg zastępczy używany przez EncoderReplacementFallback obiekt jest określany przez wywołanie konstruktora klasy. Dostępne są dwie opcje:
Zastąp element znakiem domyślnym. W przypadku wywołania konstruktora EncoderReplacementFallback() znak zastępczy to "?" (U+003F).
Zastąp ciąg wybranym ciągiem. W przypadku wywołania konstruktora EncoderReplacementFallback(String) należy podać ciąg zastępczy.
Jeśli wybierzesz ciąg rezerwowy do użycia z tą klasą, upewnij się, że ciąg składa się całkowicie z znaków, które mogą być zakodowane w kodowaniu docelowym. W przeciwnym razie rekursywne wyniki rezerwowe, powodując .ArgumentException
Ta klasa jest jedną z dwóch klas .NET Framework, które implementują różne strategie rezerwowe do obsługi błędów konwersji kodowania. Druga klasa to EncoderExceptionFallback klasa, która zgłasza EncoderFallbackException błąd w przypadku napotkania nieprawidłowego znaku.
Konstruktory
EncoderReplacementFallback() |
Inicjuje nowe wystąpienie klasy EncoderReplacementFallback. |
EncoderReplacementFallback(String) |
Inicjuje EncoderReplacementFallback nowe wystąpienie klasy przy użyciu określonego ciągu zastępczego. |
Właściwości
DefaultString |
Pobiera ciąg zastępczy, który jest wartością EncoderReplacementFallback obiektu. |
MaxCharCount |
Pobiera liczbę znaków w ciągu zastępczym obiektu EncoderReplacementFallback . |
Metody
CreateFallbackBuffer() |
EncoderFallbackBuffer Tworzy obiekt zainicjowany za pomocą ciągu zastępczego tego EncoderReplacementFallback obiektu. |
Equals(Object) |
Wskazuje, czy wartość określonego obiektu jest równa obiektowi EncoderReplacementFallback . |
GetHashCode() |
Pobiera kod skrótu dla wartości EncoderReplacementFallback obiektu. |
GetType() |
Type Pobiera wartość bieżącego wystąpienia. (Odziedziczone po Object) |
MemberwiseClone() |
Tworzy płytkią kopię bieżącego Objectelementu . (Odziedziczone po Object) |
ToString() |
Zwraca ciąg reprezentujący bieżący obiekt. (Odziedziczone po Object) |