Export (0) Print
Expand All
1 out of 1 rated this helpful - Rate this topic

DecoderExceptionFallback Class

Throws DecoderFallbackException if an encoded input byte sequence cannot be converted to a decoded output character. This class cannot be inherited.


Namespace:  System.Text
Assembly:  mscorlib (in mscorlib.dll)
public sealed class DecoderExceptionFallback : DecoderFallback

The DecoderExceptionFallback type exposes the following members.

Public methodDecoderExceptionFallbackInitializes a new instance of the DecoderExceptionFallback class.
Public propertyMaxCharCountGets the maximum number of characters this instance can return. (Overrides DecoderFallback.MaxCharCount.)
Public methodCreateFallbackBufferInitializes a new instance of the DecoderExceptionFallback class. (Overrides DecoderFallback.CreateFallbackBuffer().)
Public methodEqualsIndicates whether the current DecoderExceptionFallback object and a specified object are equal. (Overrides Object.Equals(Object).)
Public methodGetHashCodeRetrieves the hash code for this instance. (Overrides Object.GetHashCode().)
Public methodGetTypeGets the Type of the current instance. (Inherited from Object.)
Public methodToStringReturns a string that represents the current object. (Inherited from Object.)

An encoding maps a Unicode character to an encoded sequence of bytes, which can subsequently be transferred to a physical medium, such as a disk, or over a communications link. Characters can be mapped in various ways, and a particular encoding is represented by a type derived from the Encoding class. Specifically, the encoding type's GetBytes method encodes a character to a byte sequence, and the GetChars method decodes a byte sequence to a character.

A decoding operation can fail if the input byte sequence cannot be mapped by the encoding. For example, an ASCIIEncoding object cannot decode a byte sequence that yields a character having a code point value that is outside the range U+0000 to U+007F.

In cases where an encoding or decoding conversion cannot be performed, the .NET Framework provides a failure-handling mechanism called a fallback. Your application can use the predefined .NET Framework decoder fallback, or it can create a custom decoder fallback derived from the DecoderFallback and DecoderFallbackBuffer classes.

The .NET Framework provides two predefined classes that implement different fallback strategies for handling decoding conversion failures. The DecoderReplacementFallback class substitutes a string provided in place of any input byte sequence that cannot be converted. After the substitute string is emitted, the decoding operation continues converting the remainder of the input. In contrast, the DecoderExceptionFallback class throws a DecoderFallbackException when an invalid byte sequence is encountered.

The following code example demonstrates the DecoderExceptionFallback and DecoderFallbackException classes.

// This example demonstrates the DecoderExceptionFallback 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 DecoderExceptionFallback parameter specifies that an exception 
// is thrown if a character cannot be encoded.  
// An encoder exception fallback is also specified, but in this code 
// example the encoding operation cannot fail.  

    Encoding ae = Encoding.GetEncoding(
                  new EncoderExceptionFallback(), 
                  new DecoderExceptionFallback());
    string inputString = "XYZ";
    string decodedString;
    string twoNewLines = "\n\n";
    byte[] encodedBytes = new byte[ae.GetByteCount(inputString)];
    int numberOfEncodedBytes = 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);

// -------------------------------------------------------------------------- 
// 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", 
    foreach (byte b in encodedBytes)
        Console.Write("0x{0:X2} ", (int)b);

// -------------------------------------------------------------------------- 

// 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", 
    foreach (byte b in encodedBytes)
        Console.Write("0x{0:X2} ", (int)b);

// -------------------------------------------------------------------------- 
// Attempt to decode the encoded bytes. However, an exception is thrown  
// before the byte sequence can be decoded.

    Console.WriteLine("Compare the decoded bytes to the input string...");

    try {
        decodedString = ae.GetString(encodedBytes);
    catch (DecoderFallbackException dfe)
        Console.WriteLine("\n*** THE CODE EXAMPLE TERMINATES HERE AS INTENDED. ***");

// 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): "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...
System.Text.DecoderFallbackException: Unable to translate bytes [FF] at index 0 from speci
fied code page to Unicode.
   at System.Text.DecoderExceptionFallbackBuffer.Throw(Byte[] bytesUnknown, Int32 index)
   at System.Text.DecoderExceptionFallbackBuffer.Fallback(Byte[] bytesUnknown, Int32 index
   at System.Text.DecoderFallbackBuffer.InternalFallback(Byte[] bytes, Byte* pBytes)
   at System.Text.ASCIIEncoding.GetCharCount(Byte* bytes, Int32 count, DecoderNLS decoder)

   at System.String.CreateStringFromEncoding(Byte* bytes, Int32 byteLength, Encoding encod
   at System.Text.ASCIIEncoding.GetString(Byte[] bytes, Int32 byteIndex, Int32 byteCount)
   at System.Text.Encoding.GetString(Byte[] bytes)
   at Sample.Main()



.NET Framework

Supported in: 4.5.1, 4.5, 4, 3.5, 3.0, 2.0

.NET Framework Client Profile

Supported in: 4, 3.5 SP1

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Server Core Role not supported), Windows Server 2008 R2 (Server Core Role supported with SP1 or later; Itanium not supported)

The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.

Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.
Did you find this helpful?
(1500 characters remaining)
Thank you for your feedback
© 2014 Microsoft. All rights reserved.