Questo articolo è stato tradotto automaticamente. Per visualizzare l'articolo in inglese, selezionare la casella di controllo Inglese. È possibile anche visualizzare il testo inglese in una finestra popup posizionando il puntatore del mouse sopra il testo.
Traduzione
Inglese

Metodo Encoding.GetBytes (Char[])

 

Data di pubblicazione: ottobre 2016

Quando ne viene eseguito l'override in una classe derivata, codifica tutti i caratteri nella matrice di caratteri specificata in una sequenza di byte.

Spazio dei nomi:   System.Text
Assembly:  mscorlib (in mscorlib.dll)

public virtual byte[] GetBytes(
	char[] chars
)

Parametri

chars
Type: System.Char[]

Matrice di caratteri contenente i caratteri da codificare.

Valore restituito

Type: System.Byte[]

Matrice di byte contenente i risultati della codifica del set di caratteri specificato.

Exception Condition
ArgumentNullException

chars è null.

EncoderFallbackException

Si è verificato un fallback. Vedere Codifica di caratteri in .NET Framework per una spiegazione completa

-e-

EncoderFallback è impostato su EncoderExceptionFallback.

Se il conversione dei dati sono disponibili solo in blocchi sequenziali (ad esempio i dati letti da un flusso) o se la quantità di dati è talmente grande che deve essere suddiviso in blocchi più piccoli, è necessario utilizzare il Decoder o Encoder fornite dal GetDecoder (metodo) o GetEncoder (metodo), rispettivamente, di una classe derivata.

Il GetByteCount metodo determina il numero di byte risultanti dalla codifica di un set di caratteri Unicode e GetBytes metodo esegue la codifica. Il GetBytes metodo prevede conversioni discrete, a differenza di Encoder.GetBytes metodo che gestisce più conversioni su un singolo flusso di input.

Versioni diverse di GetByteCount e GetBytes sono supportati. Di seguito sono riportate alcune considerazioni di programmazione per l'utilizzo di questi metodi:

  • L'applicazione potrebbe essere necessario codificare molti caratteri di input a una tabella codici ed elaborare i caratteri usando più chiamate. In questo caso, è probabilmente necessario mantenere lo stato tra chiamate, prendendo in considerazione lo stato in cui viene mantenuto per la Encoder dell'oggetto in uso. (Ad esempio, una sequenza di caratteri che include coppie di surrogati potrebbe terminare con un surrogato alto. Il Encoder ricorderà tale surrogato alto in modo che può essere combinato con un surrogato basso all'inizio di una chiamata successiva. Encoding non sarà in grado di gestire lo stato, pertanto verrà inviato il carattere per il EncoderFallback.)

  • Se l'applicazione gestisce le stringhe di input, è necessario chiamare la versione della stringa di GetBytes metodo.

  • La versione di buffer di caratteri Unicode di GetBytes(Char*, Int32, Byte*, Int32) consente alcune tecniche veloci, in particolare con più chiamate utilizzando il Encoder oggetto o l'inserimento nel buffer esistenti. Tenere presente tuttavia che questa versione del metodo a volte è sicuro, poiché i puntatori sono necessari.

  • Se l'applicazione deve convertire una grande quantità di dati, è necessario che riutilizzi il buffer di output. In questo caso, il GetBytes versione che supporta matrici di byte è la scelta migliore.

  • Si consiglia di utilizzare il Encoder.Convert metodo invece GetByteCount. Il metodo di conversione converte tutti i dati possibili e generare un'eccezione se il buffer di output è troppo piccolo. Per la codifica continua di un flusso, questo metodo è spesso la scelta migliore.

Nell'esempio seguente determina il numero di byte necessari per codificare una matrice di caratteri, codifica i caratteri e visualizza il numero di byte risultante.

using System;
using System.Text;

public class SamplesEncoding  {

   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[] { 'z', 'a', '\u0306', '\u01FD', '\u03B2', '\uD8FF', '\uDCFF' };

      // Get different encodings.
      Encoding  u7    = Encoding.UTF7;
      Encoding  u8    = Encoding.UTF8;
      Encoding  u16LE = Encoding.Unicode;
      Encoding  u16BE = Encoding.BigEndianUnicode;
      Encoding  u32   = Encoding.UTF32;

      // Encode the entire array, and print out the counts and the resulting bytes.
      PrintCountsAndBytes( myChars, u7 );
      PrintCountsAndBytes( myChars, u8 );
      PrintCountsAndBytes( myChars, u16LE );
      PrintCountsAndBytes( myChars, u16BE );
      PrintCountsAndBytes( myChars, u32 );

   }


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

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

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

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

      // Encode the array of chars.
      byte[] bytes = enc.GetBytes( chars );

      // 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.UnicodeEncoding    : 14  16  :7A 00 61 00 06 03 FD 01 B2 03 FF D8 FF DC
System.Text.UnicodeEncoding    : 14  16  :00 7A 00 61 03 06 01 FD 03 B2 D8 FF DC FF
System.Text.UTF32Encoding      : 24  32  :7A 00 00 00 61 00 00 00 06 03 00 00 FD 01 00 00 B2 03 00 00 FF FC 04 00

*/

Universal Windows Platform
Disponibile da 8
.NET Framework
Disponibile da 1.1
Libreria di classi portabile
Supportato in: piattaforme .NET portabili
Silverlight
Disponibile da 2.0
Windows Phone Silverlight
Disponibile da 7.0
Windows Phone
Disponibile da 8.1
Torna all'inizio
Mostra: