Assembly : mscorlib (dans mscorlib.dll)
Syntaxe<SerializableAttribute> _ <ComVisibleAttribute(True)> _ Public MustInherit Class Encoder
Dim instance As Encoder
[SerializableAttribute] [ComVisibleAttribute(true)] public abstract class Encoder
[SerializableAttribute] [ComVisibleAttribute(true)] public ref class Encoder abstract
/** @attribute SerializableAttribute() */ /** @attribute ComVisibleAttribute(true) */ public abstract class Encoder
SerializableAttribute ComVisibleAttribute(true) public abstract class Encoder
NotesLe codage est le processus de transformation d'un jeu de caractères en une séquence d'octets. Le décodage est le processus inverse ; il consiste à transformer une séquence d'octets codés en un jeu de caractères.
Comme Encoder conserve les informations d'état entre les appels successifs de GetBytes, les séquences de caractères qui s'étendent sur deux blocs adjacents peuvent être codées directement. Encoder conserve également les caractères de queue à la fin des blocs de données et les utilise lors de l'opération de décodage suivante. Par exemple, un bloc de données peut se terminer par un substitut étendu non apparié, et le substitut faible correspondant peut se trouver dans le bloc de données suivant. Par conséquent, les classes Decoder et Encoder sont utiles dans les opérations de transmission réseau et de fichiers, car celles-ci traitent souvent des blocs de données et non un flux complet.
La méthode GetByteCount détermine le nombre d'octets entraînant le codage d'un jeu de caractères Unicode, et la méthode GetBytes exécute ce codage.
Pour obtenir une instance d'implémentation de cette classe, utilisez la méthode GetEncoder d'une implémentation Encoding.
Considérations de version
Un objet Decoder ou Encoder peut être sérialisé pendant une opération de conversion. L'état de l'objet est préservé s'il est désérialisé dans la même version du .NET Framework, mais il est perdu s'il est désérialisé dans une autre version.
ExempleL'exemple de code suivant montre comment convertir un tableau de caractères Unicode en blocs d'octets à l'aide d'un codage spécifié. Le tableau de caractères est d'abord codé à l'aide de UTF7Encoding à des fins de comparaison. Ensuite, il est codé à l'aide de Encoder.
Imports System Imports System.Text Imports Microsoft.VisualBasic Imports Microsoft.VisualBasic.Strings Class EncoderTest Public Shared Sub Main() ' Unicode characters. ' ChrW(35) = # ' ChrW(37) = % ' ChrW(928) = Pi ' ChrW(931) = Sigma Dim chars() As Char = {ChrW(35), ChrW(37), ChrW(928), ChrW(931)} ' Encode characters using an Encoding object. Dim encoding As Encoding = Encoding.UTF7 Console.WriteLine( _ "Using Encoding" & _ ControlChars.NewLine & _ "--------------" _ ) ' Encode complete array for comparison. Dim allCharactersFromEncoding As Byte() = encoding.GetBytes(chars) Console.WriteLine("All characters encoded:") ShowArray(allCharactersFromEncoding) ' Encode characters, one-by-one. ' The Encoding object will NOT maintain state between calls. Dim firstchar As Byte() = encoding.GetBytes(chars, 0, 1) Console.WriteLine("First character:") ShowArray(firstchar) Dim secondchar As Byte() = encoding.GetBytes(chars, 1, 1) Console.WriteLine("Second character:") ShowArray(secondchar) Dim thirdchar As Byte() = encoding.GetBytes(chars, 2, 1) Console.WriteLine("Third character:") ShowArray(thirdchar) Dim fourthchar As Byte() = encoding.GetBytes(chars, 3, 1) Console.WriteLine("Fourth character:") ShowArray(fourthchar) ' Now, encode characters using an Encoder object. Dim encoder As Encoder = encoding.GetEncoder() Console.WriteLine( _ "Using Encoder" & _ ControlChars.NewLine & _ "-------------" _ ) ' Encode complete array for comparison. Dim allCharactersFromEncoder( _ encoder.GetByteCount(chars, 0, chars.Length, True) _ ) As Byte encoder.GetBytes(chars, 0, chars.Length, allCharactersFromEncoder, 0, True) Console.WriteLine("All characters encoded:") ShowArray(allCharactersFromEncoder) ' Do not flush state; i.e. maintain state between calls. Dim bFlushState As Boolean = False ' Encode characters one-by-one. ' By maintaining state, the Encoder will not store extra bytes in the output. Dim firstcharNoFlush( _ encoder.GetByteCount(chars, 0, 1, bFlushState) _ ) As Byte encoder.GetBytes(chars, 0, 1, firstcharNoFlush, 0, bFlushState) Console.WriteLine("First character:") ShowArray(firstcharNoFlush) Dim secondcharNoFlush( _ encoder.GetByteCount(chars, 1, 1, bFlushState) _ ) As Byte encoder.GetBytes(chars, 1, 1, secondcharNoFlush, 0, bFlushState) Console.WriteLine("Second character:") ShowArray(secondcharNoFlush) Dim thirdcharNoFlush( _ encoder.GetByteCount(chars, 2, 1, bFlushState) _ ) As Byte encoder.GetBytes(chars, 2, 1, thirdcharNoFlush, 0, bFlushState) Console.WriteLine("Third character:") ShowArray(thirdcharNoFlush) ' Must flush state on last call to GetBytes(). bFlushState = True Dim fourthcharNoFlush( _ encoder.GetByteCount(chars, 3, 1, bFlushState) _ ) As Byte encoder.GetBytes(chars, 3, 1, fourthcharNoFlush, 0, bFlushState) Console.WriteLine("Fourth character:") ShowArray(fourthcharNoFlush) End Sub 'Main Public Shared Sub ShowArray(theArray As Array) Dim o As Object For Each o In theArray Console.Write("[{0}]", o) Next o Console.WriteLine(ControlChars.NewLine) End Sub 'ShowArray End Class 'EncoderTest
using System; using System.Text; class EncoderTest { public static void Main() { // The characters to encode. Char[] chars = new Char[] { '\u0023', // # '\u0025', // % '\u03a0', // Pi '\u03a3' // Sigma }; // Encode characters using an Encoding object. Encoding encoding = Encoding.UTF7; Console.WriteLine("Using Encoding\n--------------"); // Encode complete array for comparison. Byte[] allCharactersFromEncoding = encoding.GetBytes(chars); Console.WriteLine("All characters encoded:"); ShowArray(allCharactersFromEncoding); // Encode characters, one-by-one. // The Encoding object will NOT maintain state between calls. Byte[] firstchar = encoding.GetBytes(chars, 0, 1); Console.WriteLine("First character:"); ShowArray(firstchar); Byte[] secondchar = encoding.GetBytes(chars, 1, 1); Console.WriteLine("Second character:"); ShowArray(secondchar); Byte[] thirdchar = encoding.GetBytes(chars, 2, 1); Console.WriteLine("Third character:"); ShowArray(thirdchar); Byte[] fourthchar = encoding.GetBytes(chars, 3, 1); Console.WriteLine("Fourth character:"); ShowArray(fourthchar); // Now, encode characters using an Encoder object. Encoder encoder = encoding.GetEncoder(); Console.WriteLine("Using Encoder\n-------------"); // Encode complete array for comparison. Byte[] allCharactersFromEncoder = new Byte[encoder.GetByteCount(chars, 0, chars.Length, true)]; encoder.GetBytes(chars, 0, chars.Length, allCharactersFromEncoder, 0, true); Console.WriteLine("All characters encoded:"); ShowArray(allCharactersFromEncoder); // Do not flush state; i.e. maintain state between calls. bool bFlushState = false; // Encode characters one-by-one. // By maintaining state, the Encoder will not store extra bytes in the output. Byte[] firstcharNoFlush = new Byte[encoder.GetByteCount(chars, 0, 1, bFlushState)]; encoder.GetBytes(chars, 0, 1, firstcharNoFlush, 0, bFlushState); Console.WriteLine("First character:"); ShowArray(firstcharNoFlush); Byte[] secondcharNoFlush = new Byte[encoder.GetByteCount(chars, 1, 1, bFlushState)]; encoder.GetBytes(chars, 1, 1, secondcharNoFlush, 0, bFlushState); Console.WriteLine("Second character:"); ShowArray(secondcharNoFlush); Byte[] thirdcharNoFlush = new Byte[encoder.GetByteCount(chars, 2, 1, bFlushState)]; encoder.GetBytes(chars, 2, 1, thirdcharNoFlush, 0, bFlushState); Console.WriteLine("Third character:"); ShowArray(thirdcharNoFlush); // Must flush state on last call to GetBytes(). bFlushState = true; Byte[] fourthcharNoFlush = new Byte[encoder.GetByteCount(chars, 3, 1, bFlushState)]; encoder.GetBytes(chars, 3, 1, fourthcharNoFlush, 0, bFlushState); Console.WriteLine("Fourth character:"); ShowArray(fourthcharNoFlush); } public static void ShowArray(Array theArray) { foreach (Object o in theArray) { Console.Write("[{0}]", o); } Console.WriteLine("\n"); } }
using namespace System; using namespace System::Text; using namespace System::Collections; void ShowArray( Array^ theArray ) { IEnumerator^ myEnum = theArray->GetEnumerator(); while ( myEnum->MoveNext() ) { Object^ o = safe_cast<Object^>(myEnum->Current); Console::Write( "[{0}]", o ); } Console::WriteLine( "\n" ); } int main() { // The characters to encode. // Pi // Sigma array<Char>^chars = {L'\u03a0',L'\u03a3',L'\u03a6',L'\u03a9'}; // Encode characters using an Encoding Object*. Encoding^ encoding = Encoding::UTF7; Console::WriteLine( "Using Encoding\n--------------" ); // Encode complete array for comparison. array<Byte>^allCharactersFromEncoding = encoding->GetBytes( chars ); Console::WriteLine( "All characters encoded:" ); ShowArray( allCharactersFromEncoding ); // Encode characters, one-by-one. // The Encoding Object* will NOT maintain state between calls. array<Byte>^firstchar = encoding->GetBytes( chars, 0, 1 ); Console::WriteLine( "First character:" ); ShowArray( firstchar ); array<Byte>^secondchar = encoding->GetBytes( chars, 1, 1 ); Console::WriteLine( "Second character:" ); ShowArray( secondchar ); array<Byte>^thirdchar = encoding->GetBytes( chars, 2, 1 ); Console::WriteLine( "Third character:" ); ShowArray( thirdchar ); array<Byte>^fourthchar = encoding->GetBytes( chars, 3, 1 ); Console::WriteLine( "Fourth character:" ); ShowArray( fourthchar ); // Now, encode characters using an Encoder Object*. Encoder^ encoder = encoding->GetEncoder(); Console::WriteLine( "Using Encoder\n-------------" ); // Encode complete array for comparison. array<Byte>^allCharactersFromEncoder = gcnew array<Byte>(encoder->GetByteCount( chars, 0, chars->Length, true )); encoder->GetBytes( chars, 0, chars->Length, allCharactersFromEncoder, 0, true ); Console::WriteLine( "All characters encoded:" ); ShowArray( allCharactersFromEncoder ); // Do not flush state; i.e. maintain state between calls. bool bFlushState = false; // Encode characters one-by-one. // By maintaining state, the Encoder will not store extra bytes in the output. array<Byte>^firstcharNoFlush = gcnew array<Byte>(encoder->GetByteCount( chars, 0, 1, bFlushState )); encoder->GetBytes( chars, 0, 1, firstcharNoFlush, 0, bFlushState ); Console::WriteLine( "First character:" ); ShowArray( firstcharNoFlush ); array<Byte>^secondcharNoFlush = gcnew array<Byte>(encoder->GetByteCount( chars, 1, 1, bFlushState )); encoder->GetBytes( chars, 1, 1, secondcharNoFlush, 0, bFlushState ); Console::WriteLine( "Second character:" ); ShowArray( secondcharNoFlush ); array<Byte>^thirdcharNoFlush = gcnew array<Byte>(encoder->GetByteCount( chars, 2, 1, bFlushState )); encoder->GetBytes( chars, 2, 1, thirdcharNoFlush, 0, bFlushState ); Console::WriteLine( "Third character:" ); ShowArray( thirdcharNoFlush ); // Must flush state on last call to GetBytes(). bFlushState = true; array<Byte>^fourthcharNoFlush = gcnew array<Byte>(encoder->GetByteCount( chars, 3, 1, bFlushState )); encoder->GetBytes( chars, 3, 1, fourthcharNoFlush, 0, bFlushState ); Console::WriteLine( "Fourth character:" ); ShowArray( fourthcharNoFlush ); }
import System.*; import System.Text.*; class EncoderTest { public static void main(String[] args) { // The characters to encode. char chars[] = new char[] { '\u0023', // # '\u0025', // % '\u03a0', // Pi '\u03a3' // Sigma }; // Encode characters using an Encoding object. Encoding encoding = Encoding.get_UTF7(); Console.WriteLine("Using Encoding\n--------------"); // Encode complete array for comparison. ubyte allCharactersFromEncoding[] = encoding.GetBytes(chars); Console.WriteLine("All characters encoded:"); ShowArray(allCharactersFromEncoding); // Encode characters, one-by-one. // The Encoding object will NOT maintain state between calls. ubyte firstchar[] = encoding.GetBytes(chars, 0, 1); Console.WriteLine("First character:"); ShowArray(firstchar); ubyte secondchar[] = encoding.GetBytes(chars, 1, 1); Console.WriteLine("Second character:"); ShowArray(secondchar); ubyte thirdchar[] = encoding.GetBytes(chars, 2, 1); Console.WriteLine("Third character:"); ShowArray(thirdchar); ubyte fourthchar[] = encoding.GetBytes(chars, 3, 1); Console.WriteLine("Fourth character:"); ShowArray(fourthchar); // Now, encode characters using an Encoder object. Encoder encoder = encoding.GetEncoder(); Console.WriteLine("Using Encoder\n-------------"); // Encode complete array for comparison. ubyte allCharactersFromEncoder[] = new ubyte[encoder.GetByteCount(chars, 0, chars.length, true)]; encoder.GetBytes(chars, 0, chars.length, allCharactersFromEncoder, 0, true); Console.WriteLine("All characters encoded:"); ShowArray(allCharactersFromEncoder); // Do not flush state; i.e. maintain state between calls. boolean bFlushState = false; // Encode characters one-by-one. // By maintaining state, the Encoder will not store // extra bytes in the output. ubyte firstcharNoFlush[] = new ubyte[encoder.GetByteCount(chars, 0, 1, bFlushState)]; encoder.GetBytes(chars, 0, 1, firstcharNoFlush, 0, bFlushState); Console.WriteLine("First character:"); ShowArray(firstcharNoFlush); ubyte secondcharNoFlush[] = new ubyte[encoder.GetByteCount(chars, 1, 1, bFlushState)]; encoder.GetBytes(chars, 1, 1, secondcharNoFlush, 0, bFlushState); Console.WriteLine("Second character:"); ShowArray(secondcharNoFlush); ubyte thirdcharNoFlush[] = new ubyte[encoder.GetByteCount(chars, 2, 1, bFlushState)]; encoder.GetBytes(chars, 2, 1, thirdcharNoFlush, 0, bFlushState); Console.WriteLine("Third character:"); ShowArray(thirdcharNoFlush); // Must flush state on last call to GetBytes(). bFlushState = true; ubyte fourthcharNoFlush[] = new ubyte[encoder.GetByteCount(chars, 3, 1, bFlushState)]; encoder.GetBytes(chars, 3, 1, fourthcharNoFlush, 0, bFlushState); Console.WriteLine("Fourth character:"); ShowArray(fourthcharNoFlush); } //main public static void ShowArray(Array theArray) { Object o = null; for(int iCtr = 0; iCtr < theArray.get_Length(); iCtr++) { o = theArray.get_Item(iCtr); Console.Write("[{0}]", o); } Console.WriteLine("\n"); } //ShowArray } //EncoderTest
Sécurité des threads
Plates-formesWindows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile pour Pocket PC, Windows Mobile pour Smartphone, Windows Server 2003, Windows XP Édition Media Center, Windows XP Professionnel Édition x64, Windows XP SP2, Windows XP Starter Edition
Le .NET Framework ne prend pas en charge toutes les versions de chaque plate-forme. Pour obtenir la liste des versions prises en charge, consultez Configuration requise.
Informations de version
Outils (masquer)
S'enregistrer
Liste des Membres
Qui est en ligne?
FAQ