DecoderFallbackException Class
[ This article is for Windows Phone 8 developers. If you’re developing for Windows 10, see the latest documentation. ]
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
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.) |
![]() | HelpLink | Gets or sets a link to the help file associated with this 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.) |
![]() | ParamName | Gets the name of the parameter that causes this exception. (Inherited from ArgumentException.) |
![]() | Source | Gets or sets the name of the application or the object that causes the error. (Inherited from Exception.) |
![]() | 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.
Imports System.Text Public Module Example Public Sub Demo(outputBlock As System.Windows.Controls.TextBlock) ' Retrieve a UTF8 encoding object that throws an exception if the ' encoding/decoding operation fails. Dim enc8 As Encoding = New UTF8Encoding(False, True) Dim inputString As String = "XYZ" Dim decodedString As String = String.Empty Dim numberOfEncodedBytes As Integer = enc8.GetByteCount(inputString) ' Create array to hold encoded bytes. Dim encodedBytes(numberOfEncodedBytes - 1) As Byte ' Display the input string in text. outputBlock.Text += String.Format("String to encode with {2} encoding: '{1}' ({0} characters)", _ inputString.Length, inputString, enc8.WebName) + vbCrLf ' Display the hexadecimal equivalent of the Char values. outputBlock.Text += "Input string in hexadecimal: " For ctr As Integer = 0 to inputString.Length - 1 outputBlock.Text += String.Format("0x{0:X2} ", Convert.ToInt32(inputString.Chars(ctr))) Next outputBlock.Text += vbCrLf ' 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) For Each b As Byte In encodedBytes outputBlock.Text += String.Format("0x{0:X2} ", Convert.ToInt32(b)) Next outputBlock.Text += vbCrLf ' Replace the encoded byte sequences for the characters 'X' and 'Z' with the ' invalid value 0xFF. encodedBytes(0) = &HFF encodedBytes(2) = &HFF outputBlock.Text += String.Format("The corrupted byte sequence in hexadecimal ({0} bytes): ", _ numberOfEncodedBytes) For Each b As Byte In encodedBytes outputBlock.Text += String.Format("0x{0:X2} ", Convert.ToInt32(b)) Next b outputBlock.Text += vbCrLf ' Try to decode the corrupted bytes. (This throws an exception.) Try decodedString += enc8.GetString(encodedBytes, 0, encodedBytes.Length) Catch e As DecoderFallbackException Dim byteString As String = String.Empty For Each unknownByte As Byte In e.BytesUnknown byteString = String.Format("0x{0:X2} ", unknownByte) Next ' Retrieve decoder to translate byte array. Dim enc8Decoder As Decoder = enc8.GetDecoder() Dim index As Integer = 0 Dim sb As 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. Do While index < encodedBytes.Length Dim success As Boolean = False ' Each character can be from 1 to 4 bytes. Const bytesPerChar As Integer = 4 For nBytes As Integer = 1 To bytesPerChar Try If index + nBytes > encodedBytes.Length Then Continue For Dim chars(enc8Decoder.GetCharCount(encodedBytes, index, nBytes) - 1) As Char enc8Decoder.GetChars(encodedBytes, index, nBytes, chars, 0) sb.Append(chars) index += nBytes success = True Exit For Catch de As DecoderFallbackException success = False ' Do nothing. End Try Next ' Conversion attempt failed. If Not success Then ' Append "*" as fallback character. sb.Append("*") index += 1 End If Loop decodedString = sb.ToString() End Try outputBlock.Text += String.Format("Decoded string: '{0}'", decodedString) + vbCrLf End Sub End Module ' 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*'


