EncoderExceptionFallback クラス
アセンブリ: mscorlib (mscorlib.dll 内)

<SerializableAttribute> _ Public NotInheritable Class EncoderExceptionFallback Inherits EncoderFallback

エンコーディングでは、Unicode 文字をエンコード済みバイト シーケンスにマップします。エンコード済みバイト シーケンスは、ディスクなどの物理メディアに転送したり、通信リンクを通じて転送したりできます。文字はさまざまな方法でマップできますが、特定のエンコーディングは Encoding クラスから派生した型で表されます。具体的には、エンコーディングの型の GetBytes メソッドは文字をバイト シーケンスにエンコードし、GetChars メソッドはバイト シーケンスを文字にデコードします。
しかし、入力文字をエンコーディングによって表現できない場合、エンコード処理は失敗する可能性があります。たとえば、ASCIIEncoding オブジェクトは、Unicode コード ポイント値が U+0000 から U+007F の範囲外にある文字をエンコードできません。
エンコーディングまたはデコードによる変換が実行できない場合のために、.NET Framework では、フォールバックと呼ばれるエラー処理機構が用意されています。コードでは、定義済みの .NET Framework のエンコーダ フォールバックを使用するか、EncoderFallback クラスと EncoderFallbackBuffer クラスから継承したカスタムのエンコーダ フォールバックを作成できます。
.NET Framework では、エンコーディング変換エラーを処理するため、異なるフォールバック方法を実装する 2 つのクラスが用意されています。EncoderReplacementFallback クラスは、変換できない入力文字の代わりに指定した文字列を挿入します。この代替文字列が、無効な文字の代わりにエンコードされます。その後、エンコード処理は、残りの入力の変換を引き続き実行します。一方、EncoderExceptionFallback クラスは、無効な文字を検出すると、EncoderFallbackException をスローします。

EncoderExceptionFallback クラスと EncoderFallbackException クラスのコード例を次に示します。
' This example demonstrates the EncoderExceptionFallback 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 EncoderExceptionFallback parameter causes an exception to ' be thrown when a character cannot be encoded. ' A decoder exception fallback is also specified, but it is not ' used because this example terminates during the encoding operation. Dim eef As New EncoderExceptionFallback() Dim def As New DecoderExceptionFallback() Dim ae As Encoding = Encoding.GetEncoding("us-ascii", eef, def) ' 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 ' cause an exception. Dim inputString As String = "«X»" Dim twoNewLines As String = vbCrLf & vbCrLf Dim numberOfEncodedBytes As Integer = ae.GetMaxByteCount(inputString.Length) ' 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) ' -------------------------------------------------------------------------- ' Attempt to encode the input string. However, an exception is thrown before ' the input string can be encoded. Console.WriteLine("Encode the input string...") ' The code example terminates during the call to the GetBytes() method. Try numberOfEncodedBytes = ae.GetBytes(inputString, 0, inputString.Length, _ encodedBytes, 0) Catch e As EncoderFallbackException Console.WriteLine(e) 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): "X" 'Input string in hexadecimal: 0xAB 0x58 0xBB ' 'Encode the input string... 'System.Text.EncoderFallbackException: Unable to translate Unicode character \u00AB at inde 'x 0 to specified code page. ' at System.Text.EncoderExceptionFallbackBuffer.Fallback(Char charUnknown, Int32 index) ' at System.Text.EncoderFallbackBuffer.InternalFallback(Char ch, Char*& chars) ' at System.Text.ASCIIEncoding.GetBytes(Char* chars, Int32 charCount, Byte* bytes, Int32 'byteCount, EncoderNLS encoder) ' at System.Text.ASCIIEncoding.GetBytes(String chars, Int32 charIndex, Int32 charCount, B 'yte[] bytes, Int32 byteIndex) ' at Sample.Main() ' '*** THE CODE EXAMPLE TERMINATES HERE AS INTENDED. *** '
// This example demonstrates the EncoderExceptionFallback 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 EncoderExceptionFallback parameter causes an exception to // be thrown when a character cannot be encoded. // A decoder exception fallback is also specified, but it is not // used because this example terminates during the encoding operation. Encoding ae = Encoding.GetEncoding( "us-ascii", new EncoderExceptionFallback(), new DecoderExceptionFallback()); // 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 // cause an exception. string inputString = "\u00abX\u00bb"; string twoNewLines = "\n\n"; byte[] encodedBytes = new byte[ae.GetMaxByteCount(inputString.Length)]; 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); // -------------------------------------------------------------------------- // Attempt to encode the input string. However, an exception is thrown before // the input string can be encoded. Console.WriteLine("Encode the input string..."); // The code example terminates during the call to the GetBytes() method. try { numberOfEncodedBytes = ae.GetBytes(inputString, 0, inputString.Length, encodedBytes, 0); } catch (EncoderFallbackException e) { Console.WriteLine(e); 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): "X" Input string in hexadecimal: 0xAB 0x58 0xBB Encode the input string... System.Text.EncoderFallbackException: Unable to translate Unicode character \u00AB at inde x 0 to specified code page. at System.Text.EncoderExceptionFallbackBuffer.Fallback(Char charUnknown, Int32 index) at System.Text.EncoderFallbackBuffer.InternalFallback(Char ch, Char*& chars) at System.Text.ASCIIEncoding.GetBytes(Char* chars, Int32 charCount, Byte* bytes, Int32 byteCount, EncoderNLS encoder) at System.Text.ASCIIEncoding.GetBytes(String chars, Int32 charIndex, Int32 charCount, B yte[] bytes, Int32 byteIndex) at Sample.Main() *** THE CODE EXAMPLE TERMINATES HERE AS INTENDED. *** */
// This example demonstrates the EncoderExceptionFallback class. using namespace System; using namespace System::Text; int main() { // Create an encoding, which is equivalent to calling the // ASCIIEncoding class constructor. // The EncoderExceptionFallback parameter causes an exception to // be thrown when a character cannot be encoded. // A decoder exception fallback is also specified, but it is not // used because this example terminates during the encoding operation. Encoding^ asciiEncoding = Encoding::GetEncoding("us-ascii", gcnew EncoderExceptionFallback(), gcnew DecoderExceptionFallback()); // 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 cause an exception. String^ inputString = L"\u00abX\u00bb"; String^ twoNewLines = Environment::NewLine + Environment::NewLine; array<Byte>^ encodedBytes = gcnew array<Byte>( asciiEncoding->GetMaxByteCount(inputString->Length)); 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); // --------------------------------------------------------------------- // Attempt to encode the input string. However, an exception is thrown // before the input string can be encoded. Console::WriteLine("Encode the input string..."); // The code example terminates during the call to the GetBytes() method. try { numberOfEncodedBytes = asciiEncoding->GetBytes(inputString, 0, inputString->Length, encodedBytes, 0); // This statement is never executed. Console::WriteLine("This statement is never executed."); } catch (EncoderFallbackException^ 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): "X" Input string in hexadecimal: 0xAB 0x58 0xBB Encode the input string... System.Text.EncoderFallbackException: Unable to translate Unicode character \u00AB at inde x 0 to specified code page. at System.Text.EncoderExceptionFallbackBuffer.Fallback(Char charUnknown, Int32 index) at System.Text.EncoderFallbackBuffer.InternalFallback(Char ch, Char*& chars) at System.Text.ASCIIEncoding.GetBytes(Char* chars, Int32 charCount, Byte* bytes, Int32 byteCount, EncoderNLS encoder) at System.Text.ASCIIEncoding.GetBytes(String chars, Int32 charIndex, Int32 charCount, B yte[] bytes, Int32 byteIndex) at Sample.Main() *** THE CODE EXAMPLE TERMINATES HERE AS INTENDED. *** */

System.Text.EncoderFallback
System.Text.EncoderExceptionFallback


Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


- EncoderExceptionFallback クラスのページへのリンク