EncoderReplacementFallback Sınıf
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
Çıkış bayt dizisine dönüştürülemeyen bir giriş karakteri için geri dönüş olarak adlandırılan bir hata işleme mekanizması sağlar. Geri dönüş, özgün giriş karakteri yerine kullanıcı tarafından belirtilen bir değiştirme dizesi kullanır. Bu sınıf devralınamaz.
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
- Devralma
- Öznitelikler
Örnekler
Aşağıdaki örnekte sınıfı gösterilmektedir EncoderReplacementFallback .
// This example demonstrates the EncoderReplacementFallback class.
using namespace System;
using namespace System::Text;
int 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^ ascii = Encoding::GetEncoding("us-ascii",
gcnew EncoderReplacementFallback("(unknown)"),
gcnew 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 = Environment::NewLine + Environment::NewLine;
array <Byte>^ encodedBytes =
gcnew array<Byte>(ascii->GetByteCount(inputString));
int numberOfEncodedBytes = 0;
// ---------------------------------------------------------------------
// Display the name of the encoding.
Console::WriteLine("The name of the encoding is \"{0}\".{1}",
ascii->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 = ascii->GetBytes(inputString, 0, inputString->Length,
encodedBytes, 0);
// Display the encoded bytes.
Console::WriteLine("Encoded bytes in hexadecimal ({0} bytes):{1}",
numberOfEncodedBytes, Environment::NewLine);
for(int i = 0; i < encodedBytes->Length; i++)
{
Console::Write("0x{0:X2} ", encodedBytes[i]);
if(((i + 1) % 6) == 0)
{
Console::WriteLine();
}
}
Console::Write(twoNewLines);
// ---------------------------------------------------------------------
// Decode the encoded bytes, yielding a reconstituted string.
Console::WriteLine("Decode the encoded bytes...");
decodedString = ascii->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.
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)"
'
Açıklamalar
Kodlama veya kod çözme işleminin başarısız olmasının yaygın bir nedeni, temel alınan kodlama sınıfının bir karakter ile eşdeğer bir bayt dizisi arasında eşleme sağlamamasıdır. Örneğin, bir ASCIIEncoding nesne U+0000 ile U+007F aralığının dışında bir Unicode kod noktası değerine sahip bir karakteri kodlayamaz. Giriş karakteri bir çıkış bayt dizisine dönüştürülemiyorsa, nesne EncoderReplacementFallback özgün giriş karakteri için belirtilen bir değiştirme dizesinin yerini alır. Dönüştürme işlemi, değiştirme dizesini kodlar ve ardından özgün girişin geri kalanını işlemeye devam eder.
Bir EncoderReplacementFallback nesne tarafından kullanılan değiştirme dizesi, sınıf oluşturucusunun çağrısı tarafından belirlenir. İki seçenek vardır:
Varsayılan karakterle değiştirilir. Oluşturucuyu EncoderReplacementFallback() çağırırsanız, değiştirme karakteri "?" olur. (U+003F).
yerine seçtiğiniz bir dize yazın. Oluşturucuyu EncoderReplacementFallback(String) çağırırsanız, değiştirme dizesini sağlarsınız.
Bu sınıfla kullanılacak bir geri dönüş dizesi seçerseniz, dizenin tamamen hedef kodlamada kodlanabilen karakterlerden oluştuğundan emin olun. Aksi takdirde, özyinelemeli bir geri dönüş sonucu verir ve bu da bir ArgumentExceptionöğesine neden olur.
Bu sınıf, kodlama dönüştürme hatalarını işlemek için farklı geri dönüş stratejileri uygulayan iki .NET Framework sınıfından biridir. Diğer sınıf EncoderExceptionFallback , geçersiz bir karakterle karşılaşıldığında bir EncoderFallbackException oluşturan sınıfıdır.
Oluşturucular
EncoderReplacementFallback() |
EncoderReplacementFallback sınıfının yeni bir örneğini başlatır. |
EncoderReplacementFallback(String) |
Belirtilen değiştirme dizesini EncoderReplacementFallback kullanarak sınıfının yeni bir örneğini başlatır. |
Özellikler
DefaultString |
Nesnenin değeri olan değiştirme dizesini EncoderReplacementFallback alır. |
MaxCharCount |
Nesnenin değiştirme dizesindeki EncoderReplacementFallback karakter sayısını alır. |
Yöntemler
CreateFallbackBuffer() |
Bu EncoderReplacementFallback nesnenin değiştirme dizesiyle başlatılan bir EncoderFallbackBuffer nesne oluşturur. |
Equals(Object) |
Belirtilen nesnenin değerinin nesneye EncoderReplacementFallback eşit olup olmadığını gösterir. |
GetHashCode() |
nesnesinin değeri EncoderReplacementFallback için karma kodu alır. |
GetType() |
Type Geçerli örneğini alır. (Devralındığı yer: Object) |
MemberwiseClone() |
Geçerli Objectöğesinin sığ bir kopyasını oluşturur. (Devralındığı yer: Object) |
ToString() |
Geçerli nesneyi temsil eden dizeyi döndürür. (Devralındığı yer: Object) |