UTF8Encoding.GetString(Byte[], Int32, Int32) Metodo

Definizione

Decodifica un intervallo di byte da una matrice di byte in una stringa.

public:
 override System::String ^ GetString(cli::array <System::Byte> ^ bytes, int index, int count);
public override string GetString (byte[] bytes, int index, int count);
[System.Runtime.InteropServices.ComVisible(false)]
public override string GetString (byte[] bytes, int index, int count);
override this.GetString : byte[] * int * int -> string
[<System.Runtime.InteropServices.ComVisible(false)>]
override this.GetString : byte[] * int * int -> string
Public Overrides Function GetString (bytes As Byte(), index As Integer, count As Integer) As String

Parametri

bytes
Byte[]

Matrice di byte contenente la sequenza di byte da decodificare.

index
Int32

Indice del primo byte da decodificare.

count
Int32

Numero di byte da decodificare.

Restituisce

String

Oggetto String contenente i risultati di decodifica della sequenza di byte specificata.

Attributi

Eccezioni

bytes è null.

index o count è minore di zero.

-oppure- index e count non indicano un intervallo valido in bytes.

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

Si è verificato un fallback (per altre informazioni, vedere Codifica dei caratteri in .NET) -e- DecoderFallback è impostato su DecoderExceptionFallback.

Esempio

Nell'esempio seguente viene inizializzata una matrice chiamando il metodo per determinare esattamente quanti byte sono necessari per una stringa codificata e quindi aggiungendo le dimensioni del byte order mark GetByteCount (BOM). Nell'esempio viene quindi chiamato il metodo per archiviare il BOM nella matrice prima di chiamare il metodo per archiviare i byte GetPreamble GetBytes codificati nella matrice. Nell'esempio viene quindi chiamato GetString il metodo per decodificare la stringa.

using System;
using System.Text;

public class Example
{
   public static void Main()
   {
      UTF8Encoding utf8 = new UTF8Encoding(true, true);

      String s = "It was the best of times, it was the worst of times...";

      // We need to dimension the array, since we'll populate it with 2 method calls.
      Byte[] bytes = new Byte[utf8.GetByteCount(s) + utf8.GetPreamble().Length];
      // Encode the string.
      Array.Copy(utf8.GetPreamble(), bytes, utf8.GetPreamble().Length);
      utf8.GetBytes(s, 0, s.Length, bytes, utf8.GetPreamble().Length);

      // Decode the byte array.
      String s2 = utf8.GetString(bytes, 0, bytes.Length);
      Console.WriteLine(s2);
   }
}
// The example displays the following output:
//        ?It was the best of times, it was the worst of times...
Imports System.Text

Module Example
   Public Sub Main()
      Dim utf8 As New UTF8Encoding(True, True)

      Dim s As String = "It was the best of times, it was the worst of times..."

      ' We need to dimension the array, since we'll populate it with 2 method calls.
      Dim bytes(utf8.GetByteCount(s) + utf8.GetPreamble().Length - 1) As Byte
      ' Encode the string.
      Array.Copy(utf8.GetPreamble(), bytes, utf8.GetPreamble().Length)
      utf8.GetBytes(s, 0, s.Length, bytes, utf8.GetPreamble().Length)

      ' Decode the byte array.
      Dim s2 As String = utf8.GetString(bytes, 0, bytes.Length)
      Console.WriteLine(s2)
   End Sub
End Module
' The example displays the following output:
'       ?It was the best of times, it was the worst of times...

Si noti che in questo caso la stringa decodificata è diversa dalla stringa originale, perché inizia con un'byte order mark U+FFFD a 16 bit. Ciò significa che le due stringhe verranno confrontate come non uguali e che se la stringa viene restituita, il BOM verrà visualizzato come carattere di sostituzione "?". Per rimuovere il BOM all'inizio della stringa, è possibile chiamare il String.TrimStart metodo .

Commenti

Con il rilevamento degli errori, una sequenza non valida causa la generazione di un'eccezione da parte di ArgumentException questo metodo. Senza il rilevamento degli errori, le sequenze non valide vengono ignorate e non viene generata alcuna eccezione.

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

I dati da convertire, ad esempio i dati letti da un flusso, potrebbero essere disponibili solo in blocchi sequenziali. In questo caso, o se la quantità di dati è così grande che deve essere suddivisa in blocchi più piccoli, usare rispettivamente o fornito dal metodo o Decoder Encoder dal metodo GetDecoder GetEncoder .

Si applica a

Vedi anche