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 UTF32Encoding.GetChars (Byte[], Int32, Int32, Char[], Int32)

 

Data di pubblicazione: ottobre 2016

Decodifica una sequenza di byte dalla matrice di byte specificata nella matrice di caratteri specificata.

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

public override int GetChars(
	byte[] bytes,
	int byteIndex,
	int byteCount,
	char[] chars,
	int charIndex
)

Parametri

bytes
Type: System.Byte[]

Matrice di byte contenente la sequenza di byte da decodificare.

byteIndex
Type: System.Int32

Indice del primo byte da decodificare.

byteCount
Type: System.Int32

Numero di byte da decodificare.

chars
Type: System.Char[]

Matrice di caratteri che deve contenere il set di caratteri risultante.

charIndex
Type: System.Int32

Indice in corrispondenza del quale iniziare a scrivere il set di caratteri risultante.

Valore restituito

Type: System.Int32

Numero effettivo di caratteri scritti in chars.

Exception Condition
ArgumentNullException

bytes è null.

-oppure-

chars è null.

ArgumentOutOfRangeException

byteIndex o byteCount o charIndex è minore di zero.

-oppure-

byteindex e byteCount non indicano un intervallo valido in bytes.

-oppure-

charIndex non è un indice valido in chars.

ArgumentException

Il rilevamento degli errori è abilitato, e bytes contiene una sequenza di byte non valida.

-oppure-

chars non dispone di sufficiente capacità da charIndex alla fine della matrice per contenere i caratteri risultanti.

DecoderFallbackException

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

-e-

DecoderFallback è impostato su DecoderExceptionFallback.

Per calcolare la dimensione di matrice esatti necessari per GetChars per archiviare i caratteri risultanti, chiamare il GetCharCount metodo. Per calcolare la dimensione massima della matrice, chiamare il GetMaxCharCount metodo. Il GetCharCount metodo alloca in genere minore di memoria, mentre il GetMaxCharCount metodo in genere viene eseguito più velocemente.

Con il rilevamento di errori, una sequenza non valido, questo metodo generare un ArgumentException. Senza il rilevamento di errori, le sequenze non valide vengono ignorate e viene generata alcuna eccezione.

Se l'intervallo di byte da decodificare include il byte order mark (BOM) e la matrice di byte è stata restituita da un metodo di un tipo di supporto non DBA, il carattere U + FFFE è incluso nella matrice di caratteri restituita da questo metodo. È possibile rimuoverlo chiamando il String.TrimStart metodo.

Dati da convertire, ad esempio i dati letti da un flusso, potrebbero essere disponibili solo in blocchi sequenziali. In questo caso, se la quantità di dati è talmente grande che deve essere la suddivisione in blocchi più piccoli, l'applicazione utilizza il Decoder o Encoder fornito dal GetDecoder (metodo) o GetEncoder (metodo), rispettivamente.

Nell'esempio seguente viene codificata una stringa in una matrice di byte e quindi decodifica i byte in una matrice di caratteri.

using System;
using System.Text;

public class SamplesUTF32Encoding  {

   public static void Main()  {

      // Create two instances of UTF32Encoding: one with little-endian byte order and one with big-endian byte order.
      UTF32Encoding u32LE = new UTF32Encoding( false, true, true );
      UTF32Encoding u32BE = new UTF32Encoding( true, true, true );


      // Create byte arrays from the same string containing the following characters:
      //    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";

      // barrBE uses the big-endian byte order.
      byte[] barrBE = new byte[u32BE.GetByteCount( myStr )];
      u32BE.GetBytes( myStr, 0, myStr.Length, barrBE, 0 );

      // barrLE uses the little-endian byte order.
      byte[] barrLE = new byte[u32LE.GetByteCount( myStr )];
      u32LE.GetBytes( myStr, 0, myStr.Length, barrLE, 0 );


      // Get the char counts and decode the byte arrays.
      Console.Write( "BE array with BE encoding : " );
      PrintCountsAndChars( barrBE, u32BE );
      Console.Write( "LE array with LE encoding : " );
      PrintCountsAndChars( barrLE, u32LE );


      // Decode the byte arrays using an encoding with a different byte order.
      Console.Write( "BE array with LE encoding : " );
      try  {
         PrintCountsAndChars( barrBE, u32LE );
      }
      catch ( System.ArgumentException e )  {
         Console.WriteLine( e.Message );
      }

      Console.Write( "LE array with BE encoding : " );
      try  {
         PrintCountsAndChars( barrLE, u32BE );
      }
      catch ( System.ArgumentException e )  {
         Console.WriteLine( e.Message );
      }

   }


   public static void PrintCountsAndChars( byte[] bytes, Encoding enc )  {

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

      // Display the exact character count.
      int iCC  = enc.GetCharCount( bytes );
      Console.Write( " {0,-3}", iCC );

      // Display the maximum character count.
      int iMCC = enc.GetMaxCharCount( bytes.Length );
      Console.Write( " {0,-3} :", iMCC );

      // Decode the bytes and display the characters.
      char[] chars = new char[iCC];
      enc.GetChars( bytes, 0, bytes.Length, chars, 0 );
      Console.WriteLine( chars );

   }

}

Universal Windows Platform
Disponibile da 10
.NET Framework
Disponibile da 2.0
Torna all'inizio
Mostra: