DecoderExceptionFallback クラスとは? わかりやすく解説

Weblio 辞書 > コンピュータ > .NET Framework クラス ライブラリ リファレンス > DecoderExceptionFallback クラスの意味・解説 

DecoderExceptionFallback クラス

メモ : このクラスは、.NET Framework version 2.0新しく追加されたものです。

エンコード済み入力バイト シーケンスデコード済み出力文字変換できない場合に、DecoderFallbackException をスローます。このクラス継承できません。

名前空間: System.Text
アセンブリ: mscorlib (mscorlib.dll 内)
構文構文

<SerializableAttribute> _
Public NotInheritable Class
 DecoderExceptionFallback
    Inherits DecoderFallback
Dim instance As DecoderExceptionFallback
[SerializableAttribute] 
public sealed class DecoderExceptionFallback
 : DecoderFallback
[SerializableAttribute] 
public ref class DecoderExceptionFallback sealed
 : public DecoderFallback
/** @attribute SerializableAttribute() */ 
public final class DecoderExceptionFallback
 extends DecoderFallback
SerializableAttribute 
public final class DecoderExceptionFallback
 extends DecoderFallback
解説解説

エンコーディングでは、Unicode 文字エンコード済みバイト シーケンスマップます。エンコード済みバイト シーケンスは、ディスクなどの物理メディア転送したり、通信リンクを通じて転送したできます文字さまざまな方法マップできますが、特定のエンコーディングEncoding クラスから派生した型で表されます。具体的には、エンコーディングの型の GetBytes メソッドは文字バイト シーケンスエンコードし、GetChars メソッドバイト シーケンス文字デコードます。

しかし、入力バイト シーケンスエンコーディングによってマップできない場合デコード処理は失敗する可能性あります。たとえば、ASCIIEncoding オブジェクトは、コード ポイント値が U+0000 から U+007F の範囲外にある文字バイト シーケンスデコードできません。

エンコーディングまたはデコードによる変換実行できない場合のために、.NET Framework では、フォールバック呼ばれるエラー処理機構用意されています。コードでは、定義済み.NET Frameworkデコーダ フォールバック使用するか、DecoderFallback クラスと DecoderFallbackBuffer クラスから継承したカスタムデコーダ フォールバック作成できます

.NET Framework では、デコード変換エラー処理するため、異なフォールバック方法実装する 2 つの定義済みクラス用意されています。DecoderReplacementFallback クラスは、変換できない入力バイト シーケンス代わりに指定した文字列挿入します代替文字列作成後、デコード処理は、残り入力変換引き続き実行します一方DecoderExceptionFallback クラスは、無効なバイト シーケンス検出すると、DecoderFallbackExceptionスローます。

使用例使用例

DecoderExceptionFallback クラスDecoderFallbackException クラスコード例次に示します

' This example demonstrates the DecoderExceptionFallback class.
Imports System
Imports System.Text

Class Sample
    Public Shared Sub 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.  


        Dim eef As New EncoderExceptionFallback()
        Dim def As New DecoderExceptionFallback()
        Dim ae As Encoding = Encoding.GetEncoding("us-ascii",
 eef, def)
        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 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...")
        ' Each element is converted to an integer with Convert.ToInt32.
        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)
        
        ' --------------------------------------------------------------------------
        ' 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 dfe As DecoderFallbackException
            Console.WriteLine(dfe)
            Console.WriteLine(vbCrLf & _
                              "*** THE CODE EXAMPLE TERMINATES
 HERE AS INTENDED. ***")
            Return
        End Try
        
        ' This statement is never executed.
        Console.WriteLine("This statement is never executed.")
    
    End Sub 'Main
End Class 'Sample
'
'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
'ing)
'   at System.Text.ASCIIEncoding.GetString(Byte[] bytes, Int32 byteIndex,
 Int32 byteCount)
'   at System.Text.Encoding.GetString(Byte[] bytes)
'   at Sample.Main()
'
'*** THE CODE EXAMPLE TERMINATES HERE AS INTENDED. ***
'
'
// 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(
                  "us-ascii",
                  new EncoderExceptionFallback(), 
                  new DecoderExceptionFallback());
    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);

// --------------------------------------------------------------------------
// 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(dfe);
        Console.WriteLine("\n*** THE CODE EXAMPLE TERMINATES HERE AS INTENDED.
 ***");
        return;
        }

// 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
ing)
   at System.Text.ASCIIEncoding.GetString(Byte[] bytes, Int32 byteIndex, Int32 byteCount)
   at System.Text.Encoding.GetString(Byte[] bytes)
   at Sample.Main()

*** THE CODE EXAMPLE TERMINATES HERE AS INTENDED. ***

*/
// This example demonstrates the DecoderExceptionFallback class.

using namespace System;
using namespace System::Text;

int 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^ asciiEncoding = Encoding::GetEncoding("us-ascii",
        gcnew EncoderExceptionFallback(), gcnew DecoderExceptionFallback());
    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);

    // ---------------------------------------------------------------------
    // 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 = asciiEncoding->GetString(encodedBytes);
        // This statement is never executed.
        Console::WriteLine("This statement is never executed.");
    }
    catch (DecoderFallbackException^ ex)
    {
        Console::WriteLine(ex);
        Console::WriteLine(
            "{0}*** THE CODE EXAMPLE TERMINATES HERE AS INTENDED. ***",
 
            Environment::NewLine);
    }
}


/*
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
ing)
at System.Text.ASCIIEncoding.GetString(Byte[] bytes, Int32 byteIndex, Int32 byteCount)
at System.Text.Encoding.GetString(Byte[] bytes)
at Sample.Main()

*** THE CODE EXAMPLE TERMINATES HERE AS INTENDED. ***

*/
継承階層継承階層
System.Object
   System.Text.DecoderFallback
    System.Text.DecoderExceptionFallback
スレッド セーフスレッド セーフ
この型の public static (Visual Basic では Shared) メンバはすべて、スレッド セーフです。インスタンス メンバ場合は、スレッド セーフであるとは限りません。
プラットフォームプラットフォーム
バージョン情報バージョン情報
参照参照



英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「DecoderExceptionFallback クラス」の関連用語

DecoderExceptionFallback クラスのお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



DecoderExceptionFallback クラスのページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
日本マイクロソフト株式会社日本マイクロソフト株式会社
© 2024 Microsoft.All rights reserved.

©2024 GRAS Group, Inc.RSS