DecoderReplacementFallback クラス
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
エンコード済み入力バイト シーケンスを出力文字に変換できない場合のために、フォールバックと呼ばれるエラー処理機構を提供します。 フォールバックは、デコード対象の入力バイト シーケンスの代わりに、ユーザーが指定した置換文字列を作成します。 このクラスは継承できません。
public ref class DecoderReplacementFallback sealed : System::Text::DecoderFallback
public sealed class DecoderReplacementFallback : System.Text.DecoderFallback
[System.Serializable]
public sealed class DecoderReplacementFallback : System.Text.DecoderFallback
type DecoderReplacementFallback = class
inherit DecoderFallback
[<System.Serializable>]
type DecoderReplacementFallback = class
inherit DecoderFallback
Public NotInheritable Class DecoderReplacementFallback
Inherits DecoderFallback
- 継承
- 属性
例
DecoderReplacementFallback クラスのコード例を次に示します。
// This example demonstrates the DecoderReplacementFallback class.
using namespace System;
using namespace System::Text;
int main()
{
// Create an encoding, which is equivalent to calling the
// ASCIIEncoding class constructor.
// The DecoderReplacementFallback parameter specifies that the
// string "(error)" is to replace characters that cannot be decoded.
// An encoder replacement fallback is also specified, but in this code
// example the encoding operation cannot fail.
Encoding^ asciiEncoding = Encoding::GetEncoding("us-ascii",
gcnew EncoderReplacementFallback("(unknown)"),
gcnew DecoderReplacementFallback("(error)"));
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);
// ---------------------------------------------------------------------
// Decode the encoded bytes.
Console::WriteLine("Compare the decoded bytes to the input string...");
decodedString = asciiEncoding->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): "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...
Input string: "XYZ"
Decoded string:"(error)Y(error)"
*/
// This example demonstrates the DecoderReplacementFallback 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 DecoderReplacementFallback parameter specifies that the
// string "(error)" is to replace characters that cannot be decoded.
// An encoder replacement fallback is also specified, but in this code
// example the encoding operation cannot fail.
Encoding ae = Encoding.GetEncoding(
"us-ascii",
new EncoderReplacementFallback("(unknown)"),
new DecoderReplacementFallback("(error)"));
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);
// --------------------------------------------------------------------------
// Decode the encoded bytes.
Console.WriteLine("Compare the decoded bytes to the input string...");
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): "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...
Input string: "XYZ"
Decoded string:"(error)Y(error)"
*/
' This example demonstrates the DecoderReplacementFallback class.
Imports System.Text
Class Sample
Public Shared Sub Main()
' Create an encoding, which is equivalent to calling the
' ASCIIEncoding class constructor.
' The DecoderReplacementFallback parameter specifies that the
' string "(error)" is to replace characters that cannot be decoded.
' An encoder replacement fallback is also specified, but in this code
' example the encoding 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)
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 implicitly 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...")
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)
' --------------------------------------------------------------------------
' Decode the encoded bytes.
Console.WriteLine("Compare the decoded bytes to the input string...")
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): "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...
'Input string: "XYZ"
'Decoded string:"(error)Y(error)"
'
注釈
エンコードまたはデコード操作が失敗する一般的な理由は、基になるエンコード クラスが文字と同等のバイト シーケンス間のマッピングを提供しない場合です。 たとえば、オブジェクトは ASCIIEncoding 、0x7Fより大きいバイト値をデコードできません。 入力バイト シーケンスを出力文字に変換できない場合、オブジェクトは DecoderReplacementFallback 、元の入力バイト シーケンスを表す置換文字列を出力に出力します。 変換プロセスは、元の入力の残りの部分をデコードし続けます。
オブジェクトによって DecoderReplacementFallback 使用される置換文字列は、そのクラス コンストラクターの呼び出しによって決まります。 次の 2 つのオプションを使用できます。
既定の文字に置き換えられます。 コンストラクターを DecoderReplacementFallback() 呼び出すと、置換文字は "?" になります。(U+003F)。
選択した文字列に置き換えます。 コンストラクターを呼び出す DecoderReplacementFallback(String) 場合は、置換文字列を指定します。
このクラスは、デコード変換エラーを処理するための異なるフォールバック戦略を実装する 2 つの.NET Framework クラスのうちの 1 つです。 もう 1 DecoderExceptionFallback つのクラスは、無効なバイト シーケンスが検出されたときに a DecoderFallbackException をスローするクラスです。
コンストラクター
DecoderReplacementFallback() |
DecoderReplacementFallback クラスの新しいインスタンスを初期化します。 |
DecoderReplacementFallback(String) |
指定した置換文字列を使用して、DecoderReplacementFallback クラスの新しいインスタンスを初期化します。 |
プロパティ
DefaultString |
DecoderReplacementFallback オブジェクトの値である置換文字列を取得します。 |
MaxCharCount |
DecoderReplacementFallback オブジェクトの置換文字列に含まれる文字数を取得します。 |
メソッド
CreateFallbackBuffer() |
この DecoderFallbackBuffer オブジェクトの置換文字列で初期化される DecoderReplacementFallback オブジェクトを作成します。 |
Equals(Object) |
指定したオブジェクトの値が、DecoderReplacementFallback オブジェクトと等しいかどうかを示します。 |
GetHashCode() |
DecoderReplacementFallback オブジェクトの値のハッシュ コードを取得します。 |
GetType() |
現在のインスタンスの Type を取得します。 (継承元 Object) |
MemberwiseClone() |
現在の Object の簡易コピーを作成します。 (継承元 Object) |
ToString() |
現在のオブジェクトを表す文字列を返します。 (継承元 Object) |