UTF32Encoding.GetBytes Méthode

Définition

Encode un jeu de caractères en une séquence d'octets.

Surcharges

GetBytes(Char*, Int32, Byte*, Int32)

Code une séquence de caractères commençant au pointeur de caractère spécifié en une séquence d'octets, qui sera stockée à partir du pointeur d'octet spécifié.

GetBytes(Char[], Int32, Int32, Byte[], Int32)

Encode un jeu de caractères du tableau de caractères spécifié dans le tableau d'octets indiqué.

GetBytes(String, Int32, Int32, Byte[], Int32)

Encode un jeu de caractères de la chaîne String spécifiée dans le tableau d'octets indiqué.

GetBytes(Char*, Int32, Byte*, Int32)

Source:
UTF32Encoding.cs
Source:
UTF32Encoding.cs
Source:
UTF32Encoding.cs

Important

Cette API n’est pas conforme CLS.

Code une séquence de caractères commençant au pointeur de caractère spécifié en une séquence d'octets, qui sera stockée à partir du pointeur d'octet spécifié.

public:
 override int GetBytes(char* chars, int charCount, System::Byte* bytes, int byteCount);
[System.CLSCompliant(false)]
[System.Security.SecurityCritical]
public override int GetBytes (char* chars, int charCount, byte* bytes, int byteCount);
[System.CLSCompliant(false)]
public override int GetBytes (char* chars, int charCount, byte* bytes, int byteCount);
[<System.CLSCompliant(false)>]
[<System.Security.SecurityCritical>]
override this.GetBytes : nativeptr<char> * int * nativeptr<byte> * int -> int
[<System.CLSCompliant(false)>]
override this.GetBytes : nativeptr<char> * int * nativeptr<byte> * int -> int

Paramètres

chars
Char*

Pointeur du premier caractère à encoder.

charCount
Int32

Nombre de caractères à encoder.

bytes
Byte*

Pointeur de l'emplacement où commencer l'écriture de la séquence d'octets obtenue.

byteCount
Int32

Nombre maximal d'octets à écrire.

Retours

Nombre réel d'octets écrits à l'emplacement indiqué par le paramètre bytes.

Attributs

Exceptions

chars a la valeur null.

-ou-

bytes a la valeur null.

charCount ou byteCount est inférieur à zéro.

La détection d’erreurs est activée et chars contient une séquence de caractères non valide.

- ou -

byteCount est inférieur au nombre d'octets obtenus.

Un secours s’est produit (pour plus d’informations, consultez Codage de caractères dans .NET)

-et-

EncoderFallback a la valeur EncoderExceptionFallback.

Remarques

Pour calculer la taille exacte du tableau requise par GetBytes pour stocker les octets résultants, vous appelez la GetByteCount méthode . Pour calculer la taille maximale du tableau, vous appelez la GetMaxByteCount méthode . La GetByteCount méthode alloue généralement moins de mémoire, tandis que la GetMaxByteCount méthode s’exécute généralement plus rapidement.

Avec la détection d’erreur, une séquence non valide entraîne la levée d’un ArgumentException. Sans détection d’erreur, les séquences non valides sont ignorées et aucune exception n’est levée.

Les données à convertir, telles que les données lues à partir d’un flux, peuvent être disponibles uniquement dans des blocs séquentiels. Dans ce cas, ou si la quantité de données est telle qu’elle doit être divisée en blocs plus petits, l’application utilise le Decoder ou Encoder fourni par la GetDecoder méthode ou la GetEncoder méthode, respectivement.

Important

Pour vous assurer que les octets encodés sont correctement décodés lorsqu’ils sont enregistrés en tant que fichier ou en tant que flux, vous pouvez préfixer un flux d’octets encodés avec un préambule. L’insertion d’un préambule au début d’un flux d’octets (par exemple, au début d’une série d’octets à écrire dans un fichier) incombe au développeur. La GetBytes méthode n’ajoute pas de préambule au début d’une séquence d’octets encodés.

Voir aussi

S’applique à

GetBytes(Char[], Int32, Int32, Byte[], Int32)

Source:
UTF32Encoding.cs
Source:
UTF32Encoding.cs
Source:
UTF32Encoding.cs

Encode un jeu de caractères du tableau de caractères spécifié dans le tableau d'octets indiqué.

public:
 override int GetBytes(cli::array <char> ^ chars, int charIndex, int charCount, cli::array <System::Byte> ^ bytes, int byteIndex);
public override int GetBytes (char[] chars, int charIndex, int charCount, byte[] bytes, int byteIndex);
override this.GetBytes : char[] * int * int * byte[] * int -> int
Public Overrides Function GetBytes (chars As Char(), charIndex As Integer, charCount As Integer, bytes As Byte(), byteIndex As Integer) As Integer

Paramètres

chars
Char[]

Tableau de caractères contenant le jeu de caractères à encoder.

charIndex
Int32

Index du premier caractère à encoder.

charCount
Int32

Nombre de caractères à encoder.

bytes
Byte[]

Tableau d'octets destiné à contenir la séquence d'octets obtenue.

byteIndex
Int32

Index auquel commencer l'écriture de la séquence d'octets obtenue.

Retours

Nombre réel d'octets écrits dans bytes.

Exceptions

chars a la valeur null.

-ou-

bytes a la valeur null.

charIndex, charCount ou byteIndex est inférieur à zéro.

- ou -

charIndex et charCount ne désignent pas une plage valide dans chars.

- ou -

byteIndex n'est pas un index valide dans bytes.

La détection d’erreurs est activée et chars contient une séquence de caractères non valide.

- ou -

bytes ne possède pas une capacité suffisante entre byteIndex et la fin du tableau pour prendre en charge les octets obtenus.

Un secours s’est produit (pour plus d’informations, consultez Codage de caractères dans .NET)

-et-

EncoderFallback a la valeur EncoderExceptionFallback.

Exemples

L’exemple suivant détermine le nombre d’octets requis pour encoder trois caractères à partir d’un tableau de caractères, puis encode les caractères et affiche les octets résultants.

using namespace System;
using namespace System::Text;
void PrintCountsAndBytes( array<Char>^chars, int index, int count, Encoding^ enc );
void PrintHexBytes( array<Byte>^bytes );
int main()
{
   
   // The characters to encode:
   //    Latin Small Letter Z (U+007A)
   //    Latin Small Letter A (U+0061)
   //    Combining Breve (U+0306)
   //    Latin Small Letter AE With Acute (U+01FD)
   //    Greek Small Letter Beta (U+03B2)
   //    a high-surrogate value (U+D8FF)
   //    a low-surrogate value (U+DCFF)
   array<Char>^myChars = gcnew array<Char>(7){
      L'z',L'a',L'\u0306',L'\u01FD',L'\u03B2',L'\xD8FF',L'\xDCFF'
   };
   
   // Create instances of different encodings.
   UTF7Encoding^ u7 = gcnew UTF7Encoding;
   UTF8Encoding^ u8Nobom = gcnew UTF8Encoding( false,true );
   UTF8Encoding^ u8Bom = gcnew UTF8Encoding( true,true );
   UTF32Encoding ^ u32Nobom = gcnew UTF32Encoding( false,false,true );
   UTF32Encoding ^ u32Bom = gcnew UTF32Encoding( false,true,true );
   
   // Encode three characters starting at index 4 and print out the counts and the resulting bytes.
   PrintCountsAndBytes( myChars, 4, 3, u7 );
   PrintCountsAndBytes( myChars, 4, 3, u8Nobom );
   PrintCountsAndBytes( myChars, 4, 3, u8Bom );
   PrintCountsAndBytes( myChars, 4, 3, u32Nobom );
   PrintCountsAndBytes( myChars, 4, 3, u32Bom );
}

void PrintCountsAndBytes( array<Char>^chars, int index, int count, Encoding^ enc )
{
   
   // Display the name of the encoding used.
   Console::Write( "{0,-25} :", enc );
   
   // Display the exact byte count.
   int iBC = enc->GetByteCount( chars, index, count );
   Console::Write( " {0,-3}", iBC );
   
   // Display the maximum byte count.
   int iMBC = enc->GetMaxByteCount( count );
   Console::Write( " {0,-3} :", iMBC );
   
   // Get the byte order mark, if any.
   array<Byte>^preamble = enc->GetPreamble();
   
   // Combine the preamble and the encoded bytes.
   array<Byte>^bytes = gcnew array<Byte>(preamble->Length + iBC);
   Array::Copy( preamble, bytes, preamble->Length );
   enc->GetBytes( chars, index, count, bytes, preamble->Length );
   
   // Display all the encoded bytes.
   PrintHexBytes( bytes );
}

void PrintHexBytes( array<Byte>^bytes )
{
   if ( (bytes == nullptr) || (bytes->Length == 0) )
      Console::WriteLine( "<none>" );
   else
   {
      for ( int i = 0; i < bytes->Length; i++ )
         Console::Write( "{0:X2} ", bytes[ i ] );
      Console::WriteLine();
   }
}

/* 
This code produces the following output.

System.Text.UTF7Encoding  : 10  11  :2B 41 37 4C 59 2F 39 7A 2F 2D
System.Text.UTF8Encoding  : 6   12  :CE B2 F1 8F B3 BF
System.Text.UTF8Encoding  : 6   12  :EF BB BF CE B2 F1 8F B3 BF
System.Text.UTF32Encoding : 8   12  :B2 03 00 00 FF FC 04 00
System.Text.UTF32Encoding : 8   12  :FF FE 00 00 B2 03 00 00 FF FC 04 00

*/
using System;
using System.Text;

public class SamplesUTF32Encoding  {

   public static void Main()  {

      // The characters to encode:
      //    Latin Small Letter Z (U+007A)
      //    Latin Small Letter A (U+0061)
      //    Combining Breve (U+0306)
      //    Latin Small Letter AE With Acute (U+01FD)
      //    Greek Small Letter Beta (U+03B2)
      //    a high-surrogate value (U+D8FF)
      //    a low-surrogate value (U+DCFF)
      char[] myChars = new char[7] { 'z', 'a', '\u0306', '\u01FD', '\u03B2', '\uD8FF', '\uDCFF' };

      // Create instances of different encodings.
      UTF7Encoding  u7       = new UTF7Encoding();
      UTF8Encoding  u8Nobom  = new UTF8Encoding( false, true );
      UTF8Encoding  u8Bom    = new UTF8Encoding( true,  true );
      UTF32Encoding u32Nobom = new UTF32Encoding( false, false, true );
      UTF32Encoding u32Bom   = new UTF32Encoding( false, true,  true );

      // Encode three characters starting at index 4 and print out the counts and the resulting bytes.
      PrintCountsAndBytes( myChars, 4, 3, u7 );
      PrintCountsAndBytes( myChars, 4, 3, u8Nobom );
      PrintCountsAndBytes( myChars, 4, 3, u8Bom );
      PrintCountsAndBytes( myChars, 4, 3, u32Nobom );
      PrintCountsAndBytes( myChars, 4, 3, u32Bom );
   }

   public static void PrintCountsAndBytes( char[] chars, int index, int count, Encoding enc )  {

      // Display the name of the encoding used.
      Console.Write( "{0,-25} :", enc.ToString() );

      // Display the exact byte count.
      int iBC  = enc.GetByteCount( chars, index, count );
      Console.Write( " {0,-3}", iBC );

      // Display the maximum byte count.
      int iMBC = enc.GetMaxByteCount( count );
      Console.Write( " {0,-3} :", iMBC );

      // Get the byte order mark, if any.
      byte[] preamble = enc.GetPreamble();

      // Combine the preamble and the encoded bytes.
      byte[] bytes = new byte[preamble.Length + iBC];
      Array.Copy( preamble, bytes, preamble.Length );
      enc.GetBytes( chars, index, count, bytes, preamble.Length );

      // Display all the encoded bytes.
      PrintHexBytes( bytes );
   }

   public static void PrintHexBytes( byte[] bytes )  {

      if (( bytes == null ) || ( bytes.Length == 0 ))
        {
            Console.WriteLine( "<none>" );
        }
        else  {
         for ( int i = 0; i < bytes.Length; i++ )
            Console.Write( "{0:X2} ", bytes[i] );
         Console.WriteLine();
      }
   }
}


/* 
This code produces the following output.

System.Text.UTF7Encoding  : 10  11  :2B 41 37 4C 59 2F 39 7A 2F 2D
System.Text.UTF8Encoding  : 6   12  :CE B2 F1 8F B3 BF
System.Text.UTF8Encoding  : 6   12  :EF BB BF CE B2 F1 8F B3 BF
System.Text.UTF32Encoding : 8   12  :B2 03 00 00 FF FC 04 00
System.Text.UTF32Encoding : 8   12  :FF FE 00 00 B2 03 00 00 FF FC 04 00

*/
Imports System.Text

Public Class SamplesUTF32Encoding   

   Public Shared Sub Main()

      ' The characters to encode:
      '    Latin Small Letter Z (U+007A)
      '    Latin Small Letter A (U+0061)
      '    Combining Breve (U+0306)
      '    Latin Small Letter AE With Acute (U+01FD)
      '    Greek Small Letter Beta (U+03B2)
      '    a high-surrogate value (U+D8FF)
      '    a low-surrogate value (U+DCFF)
      Dim myChars() As Char = {"z"c, "a"c, ChrW(&H0306), ChrW(&H01FD), ChrW(&H03B2), ChrW(&HD8FF), ChrW(&HDCFF)}

      ' Create instances of different encodings.
      Dim u7 As New UTF7Encoding()
      Dim u8Nobom As New UTF8Encoding(False, True)
      Dim u8Bom As New UTF8Encoding(True, True)
      Dim u32Nobom As New UTF32Encoding(False, False, True)
      Dim u32Bom As New UTF32Encoding(False, True, True)

      ' Encode three characters starting at index 4 and print out the counts and the resulting bytes.
      PrintCountsAndBytes(myChars, 4, 3, u7)
      PrintCountsAndBytes(myChars, 4, 3, u8Nobom)
      PrintCountsAndBytes(myChars, 4, 3, u8Bom)
      PrintCountsAndBytes(myChars, 4, 3, u32Nobom)
      PrintCountsAndBytes(myChars, 4, 3, u32Bom)

   End Sub


   Public Shared Sub PrintCountsAndBytes(chars() As Char, index As Integer, count As Integer, enc As Encoding)

      ' Display the name of the encoding used.
      Console.Write("{0,-25} :", enc.ToString())

      ' Display the exact byte count.
      Dim iBC As Integer = enc.GetByteCount(chars, index, count)
      Console.Write(" {0,-3}", iBC)

      ' Display the maximum byte count.
      Dim iMBC As Integer = enc.GetMaxByteCount(count)
      Console.Write(" {0,-3} :", iMBC)

      ' Get the byte order mark, if any.
      Dim preamble As Byte() = enc.GetPreamble()

      ' Combine the preamble and the encoded bytes.
      ' NOTE: In Visual Basic, arrays contain one extra element by default.
      '       The following line creates an array with the exact number of elements required.
      Dim bytes(preamble.Length + iBC - 1) As Byte
      Array.Copy(preamble, bytes, preamble.Length)
      enc.GetBytes(chars, index, count, bytes, preamble.Length)

      ' Display all the encoded bytes.
      PrintHexBytes(bytes)

   End Sub


   Public Shared Sub PrintHexBytes(bytes() As Byte)

      If bytes Is Nothing OrElse bytes.Length = 0 Then
         Console.WriteLine("<none>")
      Else
         Dim i As Integer
         For i = 0 To bytes.Length - 1
            Console.Write("{0:X2} ", bytes(i))
         Next i
         Console.WriteLine()
      End If

   End Sub

End Class


'This code produces the following output.
'
'System.Text.UTF7Encoding  : 10  11  :2B 41 37 4C 59 2F 39 7A 2F 2D
'System.Text.UTF8Encoding  : 6   12  :CE B2 F1 8F B3 BF
'System.Text.UTF8Encoding  : 6   12  :EF BB BF CE B2 F1 8F B3 BF
'System.Text.UTF32Encoding : 8   12  :B2 03 00 00 FF FC 04 00
'System.Text.UTF32Encoding : 8   12  :FF FE 00 00 B2 03 00 00 FF FC 04 00

Remarques

Pour calculer la taille exacte du tableau requise par GetBytes pour stocker les octets résultants, vous appelez la GetByteCount méthode . Pour calculer la taille maximale du tableau, vous appelez la GetMaxByteCount méthode . La GetByteCount méthode alloue généralement moins de mémoire, tandis que la GetMaxByteCount méthode s’exécute généralement plus rapidement.

Avec la détection d’erreur, une séquence non valide entraîne la levée d’un ArgumentException. Sans détection d’erreur, les séquences non valides sont ignorées et aucune exception n’est levée.

Les données à convertir, telles que les données lues à partir d’un flux, peuvent être disponibles uniquement dans des blocs séquentiels. Dans ce cas, ou si la quantité de données est telle qu’elle doit être divisée en blocs plus petits, l’application utilise le Decoder ou Encoder fourni par la GetDecoder méthode ou la GetEncoder méthode, respectivement.

Important

Pour vous assurer que les octets encodés sont correctement décodés lorsqu’ils sont enregistrés en tant que fichier ou en tant que flux, vous pouvez préfixer un flux d’octets encodés avec un préambule. L’insertion d’un préambule au début d’un flux d’octets (par exemple, au début d’une série d’octets à écrire dans un fichier) incombe au développeur. La GetBytes méthode n’ajoute pas de préambule au début d’une séquence d’octets encodés.

Voir aussi

S’applique à

GetBytes(String, Int32, Int32, Byte[], Int32)

Source:
UTF32Encoding.cs
Source:
UTF32Encoding.cs
Source:
UTF32Encoding.cs

Encode un jeu de caractères de la chaîne String spécifiée dans le tableau d'octets indiqué.

public:
 override int GetBytes(System::String ^ s, int charIndex, int charCount, cli::array <System::Byte> ^ bytes, int byteIndex);
public override int GetBytes (string s, int charIndex, int charCount, byte[] bytes, int byteIndex);
override this.GetBytes : string * int * int * byte[] * int -> int
Public Overrides Function GetBytes (s As String, charIndex As Integer, charCount As Integer, bytes As Byte(), byteIndex As Integer) As Integer

Paramètres

s
String

String contenant le jeu de caractères à encoder.

charIndex
Int32

Index du premier caractère à encoder.

charCount
Int32

Nombre de caractères à encoder.

bytes
Byte[]

Tableau d'octets destiné à contenir la séquence d'octets obtenue.

byteIndex
Int32

Index auquel commencer l'écriture de la séquence d'octets obtenue.

Retours

Nombre réel d'octets écrits dans bytes.

Exceptions

s a la valeur null.

-ou-

bytes a la valeur null.

charIndex, charCount ou byteIndex est inférieur à zéro.

- ou -

charIndex et charCount ne désignent pas une plage valide dans chars.

- ou -

byteIndex n'est pas un index valide dans bytes.

La détection d’erreurs est activée et s contient une séquence de caractères non valide.

- ou -

bytes ne possède pas une capacité suffisante entre byteIndex et la fin du tableau pour prendre en charge les octets obtenus.

Un secours s’est produit (pour plus d’informations, consultez Codage de caractères dans .NET)

-et-

EncoderFallback a la valeur EncoderExceptionFallback.

Exemples

L’exemple suivant détermine le nombre d’octets requis pour encoder une chaîne, puis encode la chaîne et affiche les octets résultants.

using namespace System;
using namespace System::Text;
void PrintCountsAndBytes( String^ s, Encoding^ enc );
void PrintHexBytes( array<Byte>^bytes );
int main()
{
   
   // The characters to encode:
   //    Latin Small Letter Z (U+007A)
   //    Latin Small Letter A (U+0061)
   //    Combining Breve (U+0306)
   //    Latin Small Letter AE With Acute (U+01FD)
   //    Greek Small Letter Beta (U+03B2)
   //    a high-surrogate value (U+D8FF)
   //    a low-surrogate value (U+DCFF)
   String^ myStr = L"za\u0306\u01FD\u03B2\xD8FF\xDCFF";
   
   // Create instances of different encodings.
   UTF7Encoding^ u7 = gcnew UTF7Encoding;
   UTF8Encoding^ u8Nobom = gcnew UTF8Encoding( false,true );
   UTF8Encoding^ u8Bom = gcnew UTF8Encoding( true,true );
   UTF32Encoding ^ u32Nobom = gcnew UTF32Encoding( false,false,true );
   UTF32Encoding ^ u32Bom = gcnew UTF32Encoding( false,true,true );
   
   // Get the byte counts and the bytes.
   PrintCountsAndBytes( myStr, u7 );
   PrintCountsAndBytes( myStr, u8Nobom );
   PrintCountsAndBytes( myStr, u8Bom );
   PrintCountsAndBytes( myStr, u32Nobom );
   PrintCountsAndBytes( myStr, u32Bom );
}

void PrintCountsAndBytes( String^ s, Encoding^ enc )
{
   
   // Display the name of the encoding used.
   Console::Write( "{0,-25} :", enc );
   
   // Display the exact byte count.
   int iBC = enc->GetByteCount( s );
   Console::Write( " {0,-3}", iBC );
   
   // Display the maximum byte count.
   int iMBC = enc->GetMaxByteCount( s->Length );
   Console::Write( " {0,-3} :", iMBC );
   
   // Get the byte order mark, if any.
   array<Byte>^preamble = enc->GetPreamble();
   
   // Combine the preamble and the encoded bytes.
   array<Byte>^bytes = gcnew array<Byte>(preamble->Length + iBC);
   Array::Copy( preamble, bytes, preamble->Length );
   enc->GetBytes( s, 0, s->Length, bytes, preamble->Length );
   
   // Display all the encoded bytes.
   PrintHexBytes( bytes );
}

void PrintHexBytes( array<Byte>^bytes )
{
   if ( (bytes == nullptr) || (bytes->Length == 0) )
      Console::WriteLine( "<none>" );
   else
   {
      for ( int i = 0; i < bytes->Length; i++ )
         Console::Write( "{0:X2} ", bytes[ i ] );
      Console::WriteLine();
   }
}

/* 
This code produces the following output.

System.Text.UTF7Encoding  : 18  23  :7A 61 2B 41 77 59 42 2F 51 4F 79 32 50 2F 63 2F 77 2D
System.Text.UTF8Encoding  : 12  24  :7A 61 CC 86 C7 BD CE B2 F1 8F B3 BF
System.Text.UTF8Encoding  : 12  24  :EF BB BF 7A 61 CC 86 C7 BD CE B2 F1 8F B3 BF
System.Text.UTF32Encoding : 24  28  :7A 00 00 00 61 00 00 00 06 03 00 00 FD 01 00 00 B2 03 00 00 FF FC 04 00
System.Text.UTF32Encoding : 24  28  :FF FE 00 00 7A 00 00 00 61 00 00 00 06 03 00 00 FD 01 00 00 B2 03 00 00 FF FC 04 00

*/
using System;
using System.Text;

public class SamplesUTF32Encoding  {

   public static void Main()  {

      // The characters to encode:
      //    Latin Small Letter Z (U+007A)
      //    Latin Small Letter A (U+0061)
      //    Combining Breve (U+0306)
      //    Latin Small Letter AE With Acute (U+01FD)
      //    Greek Small Letter Beta (U+03B2)
      //    a high-surrogate value (U+D8FF)
      //    a low-surrogate value (U+DCFF)
      String myStr = "za\u0306\u01FD\u03B2\uD8FF\uDCFF";

      // Create instances of different encodings.
      UTF7Encoding  u7       = new UTF7Encoding();
      UTF8Encoding  u8Nobom  = new UTF8Encoding( false, true );
      UTF8Encoding  u8Bom    = new UTF8Encoding( true,  true );
      UTF32Encoding u32Nobom = new UTF32Encoding( false, false, true );
      UTF32Encoding u32Bom   = new UTF32Encoding( false, true,  true );

      // Get the byte counts and the bytes.
      PrintCountsAndBytes( myStr, u7 );
      PrintCountsAndBytes( myStr, u8Nobom );
      PrintCountsAndBytes( myStr, u8Bom );
      PrintCountsAndBytes( myStr, u32Nobom );
      PrintCountsAndBytes( myStr, u32Bom );
   }

   public static void PrintCountsAndBytes( String s, Encoding enc )  {

      // Display the name of the encoding used.
      Console.Write( "{0,-25} :", enc.ToString() );

      // Display the exact byte count.
      int iBC  = enc.GetByteCount( s );
      Console.Write( " {0,-3}", iBC );

      // Display the maximum byte count.
      int iMBC = enc.GetMaxByteCount( s.Length );
      Console.Write( " {0,-3} :", iMBC );

      // Get the byte order mark, if any.
      byte[] preamble = enc.GetPreamble();

      // Combine the preamble and the encoded bytes.
      byte[] bytes = new byte[preamble.Length + iBC];
      Array.Copy( preamble, bytes, preamble.Length );
      enc.GetBytes( s, 0, s.Length, bytes, preamble.Length );

      // Display all the encoded bytes.
      PrintHexBytes( bytes );
   }

   public static void PrintHexBytes( byte[] bytes )  {

      if (( bytes == null ) || ( bytes.Length == 0 ))
        {
            Console.WriteLine( "<none>" );
        }
        else  {
         for ( int i = 0; i < bytes.Length; i++ )
            Console.Write( "{0:X2} ", bytes[i] );
         Console.WriteLine();
      }
   }
}


/* 
This code produces the following output.

System.Text.UTF7Encoding  : 18  23  :7A 61 2B 41 77 59 42 2F 51 4F 79 32 50 2F 63 2F 77 2D
System.Text.UTF8Encoding  : 12  24  :7A 61 CC 86 C7 BD CE B2 F1 8F B3 BF
System.Text.UTF8Encoding  : 12  24  :EF BB BF 7A 61 CC 86 C7 BD CE B2 F1 8F B3 BF
System.Text.UTF32Encoding : 24  28  :7A 00 00 00 61 00 00 00 06 03 00 00 FD 01 00 00 B2 03 00 00 FF FC 04 00
System.Text.UTF32Encoding : 24  28  :FF FE 00 00 7A 00 00 00 61 00 00 00 06 03 00 00 FD 01 00 00 B2 03 00 00 FF FC 04 00

*/
Imports System.Text

Public Class SamplesUTF32Encoding   

   Public Shared Sub Main()

      ' The characters to encode:
      '    Latin Small Letter Z (U+007A)
      '    Latin Small Letter A (U+0061)
      '    Combining Breve (U+0306)
      '    Latin Small Letter AE With Acute (U+01FD)
      '    Greek Small Letter Beta (U+03B2)
      '    a high-surrogate value (U+D8FF)
      '    a low-surrogate value (U+DCFF)
      Dim myStr As String = "za" & ChrW(&H0306) & ChrW(&H01FD) & ChrW(&H03B2) & ChrW(&HD8FF) & ChrW(&HDCFF)

      ' Create instances of different encodings.
      Dim u7 As New UTF7Encoding()
      Dim u8Nobom As New UTF8Encoding(False, True)
      Dim u8Bom As New UTF8Encoding(True, True)
      Dim u32Nobom As New UTF32Encoding(False, False, True)
      Dim u32Bom As New UTF32Encoding(False, True, True)

      ' Get the byte counts and the bytes.
      PrintCountsAndBytes(myStr, u7)
      PrintCountsAndBytes(myStr, u8Nobom)
      PrintCountsAndBytes(myStr, u8Bom)
      PrintCountsAndBytes(myStr, u32Nobom)
      PrintCountsAndBytes(myStr, u32Bom)

   End Sub


   Public Shared Sub PrintCountsAndBytes(s As String, enc As Encoding)

      ' Display the name of the encoding used.
      Console.Write("{0,-25} :", enc.ToString())

      ' Display the exact byte count.
      Dim iBC As Integer = enc.GetByteCount(s)
      Console.Write(" {0,-3}", iBC)

      ' Display the maximum byte count.
      Dim iMBC As Integer = enc.GetMaxByteCount(s.Length)
      Console.Write(" {0,-3} :", iMBC)

      ' Get the byte order mark, if any.
      Dim preamble As Byte() = enc.GetPreamble()

      ' Combine the preamble and the encoded bytes.
      ' NOTE: In Visual Basic, arrays contain one extra element by default.
      '       The following line creates an array with the exact number of elements required.
      Dim bytes(preamble.Length + iBC - 1) As Byte
      Array.Copy(preamble, bytes, preamble.Length)
      enc.GetBytes(s, 0, s.Length, bytes, preamble.Length)

      ' Display all the encoded bytes.
      PrintHexBytes(bytes)

   End Sub


   Public Shared Sub PrintHexBytes(bytes() As Byte)

      If bytes Is Nothing OrElse bytes.Length = 0 Then
         Console.WriteLine("<none>")
      Else
         Dim i As Integer
         For i = 0 To bytes.Length - 1
            Console.Write("{0:X2} ", bytes(i))
         Next i
         Console.WriteLine()
      End If

   End Sub

End Class


'This code produces the following output.
'
'System.Text.UTF7Encoding  : 18  23  :7A 61 2B 41 77 59 42 2F 51 4F 79 32 50 2F 63 2F 77 2D
'System.Text.UTF8Encoding  : 12  24  :7A 61 CC 86 C7 BD CE B2 F1 8F B3 BF
'System.Text.UTF8Encoding  : 12  24  :EF BB BF 7A 61 CC 86 C7 BD CE B2 F1 8F B3 BF
'System.Text.UTF32Encoding : 24  28  :7A 00 00 00 61 00 00 00 06 03 00 00 FD 01 00 00 B2 03 00 00 FF FC 04 00
'System.Text.UTF32Encoding : 24  28  :FF FE 00 00 7A 00 00 00 61 00 00 00 06 03 00 00 FD 01 00 00 B2 03 00 00 FF FC 04 00

Remarques

Pour calculer la taille exacte du tableau requise par GetBytes pour stocker les octets résultants, vous appelez la GetByteCount méthode . Pour calculer la taille maximale du tableau, vous appelez la GetMaxByteCount méthode . La GetByteCount méthode alloue généralement moins de mémoire, tandis que la GetMaxByteCount méthode s’exécute généralement plus rapidement.

Avec la détection d’erreur, une séquence non valide entraîne la levée d’un ArgumentException. Sans détection d’erreur, les séquences non valides sont ignorées et aucune exception n’est levée.

Les données à convertir, telles que les données lues à partir d’un flux, peuvent être disponibles uniquement dans des blocs séquentiels. Dans ce cas, ou si la quantité de données est telle qu’elle doit être divisée en blocs plus petits, l’application utilise le Decoder ou Encoder fourni par la GetDecoder méthode ou la GetEncoder méthode, respectivement.

Important

Pour vous assurer que les octets encodés sont correctement décodés lorsqu’ils sont enregistrés en tant que fichier ou en tant que flux, vous pouvez précéder un flux d’octets encodés avec un préambule. L’insertion d’un préambule au début d’un flux d’octets (par exemple, au début d’une série d’octets à écrire dans un fichier) est la responsabilité du développeur. La GetBytes méthode n’ajoute pas de préambule au début d’une séquence d’octets encodés.

Voir aussi

S’applique à