EncoderReplacementFallback クラス

定義

出力バイト シーケンスに変換できない入力文字に対して、フォールバックと呼ばれるエラー処理メカニズムを提供します。 フォールバックでは、元の入力文字ではなく、ユーザー指定の置換文字列が使用されます。 このクラスは継承できません。

public ref class EncoderReplacementFallback sealed : System::Text::EncoderFallback
public sealed class EncoderReplacementFallback : System.Text.EncoderFallback
[System.Serializable]
public sealed class EncoderReplacementFallback : System.Text.EncoderFallback
type EncoderReplacementFallback = class
    inherit EncoderFallback
[<System.Serializable>]
type EncoderReplacementFallback = class
    inherit EncoderFallback
Public NotInheritable Class EncoderReplacementFallback
Inherits EncoderFallback
継承
EncoderReplacementFallback
属性

次の例では、 EncoderReplacementFallback クラスを示します。

// This example demonstrates the EncoderReplacementFallback 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 EncoderReplacementFallback parameter specifies that the
// string, "(unknown)", replace characters that cannot be encoded.
// A decoder replacement fallback is also specified, but in this
// code example the decoding operation cannot fail.

    Encoding ae = Encoding.GetEncoding(
                  "us-ascii",
                  new EncoderReplacementFallback("(unknown)"),
                  new DecoderReplacementFallback("(error)"));

// The input string consists of the Unicode characters LEFT POINTING
// DOUBLE ANGLE QUOTATION MARK (U+00AB), 'X' (U+0058), and RIGHT POINTING
// DOUBLE ANGLE QUOTATION MARK (U+00BB).
// The encoding can only encode characters in the US-ASCII range of U+0000
// through U+007F. Consequently, the characters bracketing the 'X' character
// are replaced with the fallback replacement string, "(unknown)".

    string inputString = "\u00abX\u00bb";
    string decodedString;
    string twoNewLines = "\n\n";
    byte[] encodedBytes = new byte[ae.GetByteCount(inputString)];
    int numberOfEncodedBytes = 0;
    int ix = 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);
        }
    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);
    ix = 0;
    foreach (byte b in encodedBytes)
        {
        Console.Write("0x{0:X2} ", (int)b);
        ix++;
        if (0 == ix % 6) Console.WriteLine();
        }
    Console.Write(twoNewLines);

// --------------------------------------------------------------------------
// Decode the encoded bytes, yielding a reconstituted string.

    Console.WriteLine("Decode the encoded bytes...");
    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): "«X»"
Input string in hexadecimal: 0xAB 0x58 0xBB

Encode the input string...
Encoded bytes in hexadecimal (19 bytes):

0x28 0x75 0x6E 0x6B 0x6E 0x6F
0x77 0x6E 0x29 0x58 0x28 0x75
0x6E 0x6B 0x6E 0x6F 0x77 0x6E
0x29

Decode the encoded bytes...
Input string:  "«X»"
Decoded string:"(unknown)X(unknown)"

*/
' This example demonstrates the EncoderReplacementFallback class.
Imports System.Text

Class Sample
    Public Shared Sub Main() 
        
        ' Create an encoding, which is equivalent to calling the 
        ' ASCIIEncoding class constructor. 
        ' The EncoderReplacementFallback parameter specifies that the 
        ' string, "(unknown)", replace characters that cannot be encoded. 
        ' A decoder replacement fallback is also specified, but in this 
        ' code example the decoding 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)
        
        ' The input string consists of the Unicode characters LEFT POINTING 
        ' DOUBLE ANGLE QUOTATION MARK (U+00AB), 'X' (U+0058), and RIGHT POINTING 
        ' DOUBLE ANGLE QUOTATION MARK (U+00BB). 
        ' The encoding can only encode characters in the US-ASCII range of U+0000 
        ' through U+007F. Consequently, the characters bracketing the 'X' character
        ' are replaced with the fallback replacement string, "(unknown)".

        Dim inputString As String = "«X»"
        Dim decodedString As String
        Dim twoNewLines As String = vbCrLf & vbCrLf
        Dim ix As Integer = 0
        Dim numberOfEncodedBytes As Integer = ae.GetByteCount(inputString)
        ' Counteract the compiler adding an extra byte to the array.
        Dim encodedBytes(numberOfEncodedBytes - 1) As Byte
        
        ' --------------------------------------------------------------------------
        ' 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)
        ix = 0
        Dim b As Byte
        For Each b In encodedBytes
            Console.Write("0x{0:X2} ", Convert.ToInt32(b))
            ix += 1
            If 0 = ix Mod 6 Then
                Console.WriteLine()
            End If
        Next b
        Console.Write(twoNewLines)
        
        ' --------------------------------------------------------------------------
        ' Decode the encoded bytes, yielding a reconstituted string.
        Console.WriteLine("Decode the encoded bytes...")
        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): "X"
'Input string in hexadecimal: 0xAB 0x58 0xBB
'
'Encode the input string...
'Encoded bytes in hexadecimal (19 bytes):
'
'0x28 0x75 0x6E 0x6B 0x6E 0x6F
'0x77 0x6E 0x29 0x58 0x28 0x75
'0x6E 0x6B 0x6E 0x6F 0x77 0x6E
'0x29
'
'Decode the encoded bytes...
'Input string:  "X"
'Decoded string:"(unknown)X(unknown)"
'

注釈

エンコードまたはデコード操作が失敗する一般的な理由は、基になるエンコード クラスが文字と同等のバイト シーケンス間のマッピングを提供しない場合です。 たとえば、 ASCIIEncoding オブジェクトは、U+0000 から U+007F の範囲外の Unicode コード ポイント値を持つ文字をエンコードできません。 入力文字を出力バイト シーケンスに変換できない場合、 EncoderReplacementFallback オブジェクトは、指定した置換文字列を元の入力文字に置き換えます。 変換プロセスは、置換文字列をエンコードし、元の入力の残りの部分を処理し続けます。

EncoderReplacementFallback オブジェクトによって使用される置換文字列は、そのクラス コンストラクターの呼び出しによって決定されます。 2 つのオプションがあります。

  • 既定の文字に置き換えます。 EncoderReplacementFallback() コンストラクターを呼び出すと、置換文字は "?" になります。(U+003F)。

  • 選択した文字列に置き換えます。 EncoderReplacementFallback(String) コンストラクターを呼び出す場合は、置換文字列を指定します。

このクラスで使用するフォールバック文字列を選択する場合は、文字列がターゲット エンコードでエンコードできる文字で構成されていることを確認します。 それ以外の場合、再帰フォールバックが発生し、 ArgumentExceptionが発生します。

このクラスは、エンコード変換エラーを処理するための異なるフォールバック戦略を実装する 2 つの .NET Framework クラスのうちの 1 つです。 もう 1 つのクラスは、無効な文字が検出されたときにEncoderFallbackExceptionをスローするEncoderExceptionFallback クラスです。

コンストラクター

名前 説明
EncoderReplacementFallback()

EncoderReplacementFallback クラスの新しいインスタンスを初期化します。

EncoderReplacementFallback(String)

指定した置換文字列を使用して、 EncoderReplacementFallback クラスの新しいインスタンスを初期化します。

プロパティ

名前 説明
DefaultString

EncoderReplacementFallback オブジェクトの値である置換文字列を取得します。

MaxCharCount

EncoderReplacementFallback オブジェクトの置換文字列の文字数を取得します。

メソッド

名前 説明
CreateFallbackBuffer()

このEncoderReplacementFallback オブジェクトの置換文字列で初期化されるEncoderFallbackBuffer オブジェクトを作成します。

Equals(Object)

指定したオブジェクトの値が EncoderReplacementFallback オブジェクトと等しいかどうかを示します。

GetHashCode()

EncoderReplacementFallback オブジェクトの値のハッシュ コードを取得します。

GetType()

現在のインスタンスの Type を取得します。

(継承元 Object)
MemberwiseClone()

現在の Objectの簡易コピーを作成します。

(継承元 Object)
ToString()

現在のオブジェクトを表す文字列を返します。

(継承元 Object)

適用対象

こちらもご覧ください