DecoderFallbackException Class
The exception that is thrown when a decoder fallback operation fails. This class cannot be inherited.
System.Exception
System.SystemException
System.ArgumentException
System.Text.DecoderFallbackException
Namespace: System.Text
Assembly: mscorlib (in mscorlib.dll)
The DecoderFallbackException type exposes the following members.
| Name | Description | |
|---|---|---|
![]() ![]() ![]() | DecoderFallbackException() | Initializes a new instance of the DecoderFallbackException class. |
![]() ![]() ![]() | DecoderFallbackException(String) | Initializes a new instance of the DecoderFallbackException class. A parameter specifies the error message. |
![]() ![]() ![]() | DecoderFallbackException(String, Exception) | Initializes a new instance of the DecoderFallbackException class. Parameters specify the error message and the inner exception that is the cause of this exception. |
![]() ![]() ![]() | DecoderFallbackException(String, Byte[], Int32) | Initializes a new instance of the DecoderFallbackException class. Parameters specify the error message, the array of bytes being decoded, and the index of the byte that cannot be decoded. |
| Name | Description | |
|---|---|---|
![]() ![]() ![]() | BytesUnknown | Gets the input byte sequence that caused the exception. |
![]() ![]() ![]() | Data | Gets a collection of key/value pairs that provide additional user-defined information about the exception. (Inherited from Exception.) |
![]() ![]() ![]() | HResult | Gets or sets HRESULT, a coded numerical value that is assigned to a specific exception. (Inherited from Exception.) |
![]() ![]() ![]() | Index | Gets the index position in the input byte sequence of the byte that caused the exception. |
![]() ![]() ![]() | InnerException | Gets the Exception instance that caused the current exception. (Inherited from Exception.) |
![]() ![]() ![]() | Message | Gets the error message and the parameter name, or only the error message if no parameter name is set. (Inherited from ArgumentException.) |
![]() ![]() ![]() | StackTrace | Gets a string representation of the frames on the call stack at the time the current exception was thrown. (Inherited from Exception.) |
| Name | Description | |
|---|---|---|
![]() ![]() ![]() | Equals(Object) | Determines whether the specified Object is equal to the current Object. (Inherited from Object.) |
![]() ![]() ![]() | Finalize | Allows an object to try to free resources and perform other cleanup operations before the Object is reclaimed by garbage collection. (Inherited from Object.) |
![]() ![]() ![]() | GetBaseException | When overridden in a derived class, returns the Exception that is the root cause of one or more subsequent exceptions. (Inherited from Exception.) |
![]() ![]() ![]() | GetHashCode | Serves as a hash function for a particular type. (Inherited from Object.) |
![]() ![]() ![]() | GetType | Gets the runtime type of the current instance. (Inherited from Exception.) |
![]() ![]() ![]() | MemberwiseClone | Creates a shallow copy of the current Object. (Inherited from Object.) |
![]() ![]() ![]() | ToString | Creates and returns a string representation of the current exception. (Inherited from Exception.) |
When using the standard decoders, a DecoderFallbackException is thrown only if an attempt to decode a sequence of bytes fails and the value of the throwOnInvalidBytes argument was set to true in the Encoding implementation's class constructor.
The following example provides a possible handler for a DecoderFallbackException. It decodes a UTF8-encoded string in which two bytes have been modified so that they cannot be successfully decoded. When the exception handler is invoked, it decodes the byte array on a byte-by-byte basis and substitutes the asterisk (*) character for any bytes that cannot be successfully decoded.
using System; using System.Text; public class Example { public static void Demo(System.Windows.Controls.TextBlock outputBlock) { // Retrieve a UTF8 encoding object that throws an exception if the // encoding/decoding operation fails. Encoding enc8 = new UTF8Encoding(false, true); string inputString = "XYZ"; string decodedString = String.Empty; int numberOfEncodedBytes = enc8.GetByteCount(inputString); // Create array to hold encoded bytes. byte[] encodedBytes = new byte[numberOfEncodedBytes]; // Display the input string in text. outputBlock.Text += String.Format("String to encode with {2} encoding: '{1}' ({0} characters)\n", inputString.Length, inputString, enc8.WebName); // Display the hexadecimal equivalent of the Char values. outputBlock.Text += "Input string in hexadecimal: "; for (int ctr = 0; ctr <= inputString.Length - 1; ctr++) outputBlock.Text += String.Format("0x{0:X2} ", Convert.ToInt32(inputString[ctr])); outputBlock.Text += "\n"; // Encode the input string and display the encoded bytes. numberOfEncodedBytes = enc8.GetBytes(inputString, 0, inputString.Length, encodedBytes, 0); outputBlock.Text += String.Format("Encoded bytes in hexadecimal ({0} bytes): ", numberOfEncodedBytes); foreach (byte b in encodedBytes) outputBlock.Text += String.Format("0x{0:X2} ", Convert.ToInt32(b)); outputBlock.Text += "\n"; // Replace the encoded byte sequences for the characters 'X// and 'Z// with the // invalid value 0xFF. encodedBytes[0] = 0xFF; encodedBytes[2] = 0xFF; outputBlock.Text += String.Format("The corrupted byte sequence in hexadecimal ({0} bytes): ", numberOfEncodedBytes); foreach (byte b in encodedBytes) outputBlock.Text += String.Format("0x{0:X2} ", Convert.ToInt32(b)); outputBlock.Text += "\n"; // Try to decode the corrupted bytes. (This throws an exception.) try { decodedString += enc8.GetString(encodedBytes, 0, encodedBytes.Length); } catch (DecoderFallbackException e) { string byteString = String.Empty; foreach (byte unknownByte in e.BytesUnknown) byteString = String.Format("0x{0:X2} ", unknownByte); // Retrieve decoder to translate byte array. Decoder enc8Decoder = enc8.GetDecoder(); int index = 0; StringBuilder sb = new StringBuilder(); // A character can be encoded in up to four bytes (though 4 is rare). // Since an exception has occurred, decode on a character-by character basis. while (index < encodedBytes.Length) { bool success = false; // Each character can be from 1 to 4 bytes. const int bytesPerChar = 4; for (int nBytes = 1; nBytes <= bytesPerChar; nBytes++) { try { if (index + nBytes <= encodedBytes.Length) { char[] chars = new char[enc8Decoder.GetCharCount(encodedBytes, index, nBytes)]; enc8Decoder.GetChars(encodedBytes, index, nBytes, chars, 0); sb.Append(chars); index += nBytes; success = true; break; } } catch (DecoderFallbackException) { success = false; // Do nothing. } } // Conversion attempt failed. if (! success) { // Append "*" as fallback character. sb.Append("*"); index += 1; } } decodedString = sb.ToString(); } outputBlock.Text += String.Format("Decoded string: '{0}'\n", decodedString); } } // The example displays the following output: // String to encode with utf-8 encoding: 'XYZ' (3 characters) // Input string in hexadecimal: 0x58 0x59 0x5A // Encoded bytes in hexadecimal (3 bytes): 0x58 0x59 0x5A // The corrupted byte sequence in hexadecimal (3 bytes): 0xFF 0x59 0xFF // Decoded string: '*Y*'
For a list of the operating systems and browsers that are supported by Silverlight, see Supported Operating Systems and Browsers.





