Aracılığıyla paylaş


DecoderReplacementFallback Sınıf

Tanım

Çıkış karakterine dönüştürülemeyen kodlanmış bir giriş bayt dizisi için geri dönüş olarak adlandırılan bir hata işleme mekanizması sağlar. Geri dönüş, kodu çözülen bir giriş bayt dizisi yerine kullanıcı tarafından belirtilen bir değiştirme dizesi yayar. Bu sınıf devralınamaz.

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
Devralma
DecoderReplacementFallback
Öznitelikler

Örnekler

Aşağıdaki kod örneği sınıfını DecoderReplacementFallback gösterir.

// This example demonstrates the DecoderReplacementFallback class.

using namespace System;
using namespace System::Text;

int 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^ asciiEncoding = Encoding::GetEncoding("us-ascii",
        gcnew EncoderReplacementFallback("(unknown)"),
        gcnew DecoderReplacementFallback("(error)"));
    String^ inputString = "XYZ";
    String^ decodedString;
    String^ twoNewLines = Environment::NewLine + Environment::NewLine;
    array<Byte>^ encodedBytes = gcnew array<Byte>(
        asciiEncoding->GetByteCount(inputString));
    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);

    // ---------------------------------------------------------------------
    // Encode the input string. 

    Console::WriteLine("Encode the input string...");
    numberOfEncodedBytes = asciiEncoding->GetBytes(inputString, 0,
        inputString->Length, encodedBytes, 0);

    // Display the encoded bytes.
    Console::WriteLine("Encoded bytes in hexadecimal ({0} bytes):{1}", 
        numberOfEncodedBytes, Environment::NewLine);
    for each (Byte b in encodedBytes)
    {
        Console::Write("0x{0:X2} ", 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):{1}", 
        numberOfEncodedBytes, Environment::NewLine);
    for each (Byte b in encodedBytes)
    {
        Console::Write("0x{0:X2} ", b);
    }
    Console::Write(twoNewLines);

    // ---------------------------------------------------------------------
    // Decode the encoded bytes.

    Console::WriteLine("Compare the decoded bytes to the input string...");
    decodedString = asciiEncoding->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.

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)"
'

Açıklamalar

Kodlama veya kod çözme işleminin başarısız olmasının yaygın bir nedeni, temel alınan kodlama sınıfının bir karakter ile eşdeğer bir bayt dizisi arasında eşleme sağlamamasıdır. Örneğin, bir ASCIIEncoding nesne 0x7F büyük bir bayt değerinin kodunu çözemez. Giriş bayt dizisi çıkış karakterine dönüştürülemiyorsa, nesne DecoderReplacementFallback özgün giriş bayt sırasını temsil etmek için çıkışa bir değiştirme dizesi yayar. Dönüştürme işlemi daha sonra özgün girişin geri kalanının kodunu çözmeye devam eder.

Bir DecoderReplacementFallback nesne tarafından kullanılan değiştirme dizesi, sınıf oluşturucusunun çağrısı tarafından belirlenir. İki seçenek vardır:

Bu sınıf, kod çözme dönüştürme hatalarını işlemek için farklı geri dönüş stratejileri uygulayan iki .NET Framework sınıfından biridir. Diğer sınıf DecoderExceptionFallback , geçersiz bir bayt dizisiyle karşılaşıldığında bir DecoderFallbackException oluşturan sınıfıdır.

Oluşturucular

DecoderReplacementFallback()

DecoderReplacementFallback sınıfının yeni bir örneğini başlatır.

DecoderReplacementFallback(String)

Belirtilen değiştirme dizesini DecoderReplacementFallback kullanarak sınıfının yeni bir örneğini başlatır.

Özellikler

DefaultString

Nesnenin değeri olan değiştirme dizesini DecoderReplacementFallback alır.

MaxCharCount

Nesnenin değiştirme dizesindeki DecoderReplacementFallback karakter sayısını alır.

Yöntemler

CreateFallbackBuffer()

Bu DecoderReplacementFallback nesnenin değiştirme dizesiyle başlatılan bir DecoderFallbackBuffer nesne oluşturur.

Equals(Object)

Belirtilen nesnenin değerinin nesneye DecoderReplacementFallback eşit olup olmadığını gösterir.

GetHashCode()

nesnesinin değeri DecoderReplacementFallback için karma kodu alır.

GetType()

Type Geçerli örneğini alır.

(Devralındığı yer: Object)
MemberwiseClone()

Geçerli Objectöğesinin sığ bir kopyasını oluşturur.

(Devralındığı yer: Object)
ToString()

Geçerli nesneyi temsil eden dizeyi döndürür.

(Devralındığı yer: Object)

Şunlara uygulanır

Ayrıca bkz.