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

Definitie

Decodeert een bereik van bytes van een bytematrix in een tekenreeks.

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

Parameters

bytes
Byte[]

De bytematrix met de reeks bytes die moet worden gedecodeerd.

index
Int32

De index van de eerste byte om te decoderen.

count
Int32

Het aantal bytes dat moet worden gedecodeerd.

Retouren

Een String met de resultaten van het decoderen van de opgegeven reeks bytes.

Kenmerken

Uitzonderingen

bytes is null.

index of count kleiner is dan nul.

– of –

index en count geef geen geldig bereik aan in bytes.

Foutdetectie is ingeschakeld en bytes bevat een ongeldige reeks bytes.

Er is een terugval opgetreden (zie Character Encoding in .NET)

en

DecoderFallback is ingesteld op DecoderExceptionFallback.

Voorbeelden

In het volgende voorbeeld wordt een matrix geïnitialiseerd door de GetByteCount methode aan te roepen om te bepalen hoeveel bytes er nodig zijn voor een gecodeerde tekenreeks en vervolgens de grootte van de bytevolgordemarkering (BOM) toe te voegen. In het voorbeeld wordt vervolgens de GetPreamble methode aangeroepen om de bom op te slaan in de matrix voordat de GetBytes methode wordt aangeroepen om de gecodeerde bytes op te slaan in de matrix. In het voorbeeld wordt vervolgens de methode aangeroepen om de GetString tekenreeks te decoderen.

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...

In dit geval verschilt de gecodeerde tekenreeks van de oorspronkelijke tekenreeks, omdat deze begint met een 16-bits bytevolgordemarkering U+FFFD. Dit betekent dat de twee tekenreeksen als ongelijk worden vergeleken en dat als de tekenreeks uitvoer is, de stuklijst wordt weergegeven als het vervangende teken '?'. Als u de stuklijst aan het begin van de tekenreeks wilt verwijderen, kunt u de String.TrimStart methode aanroepen.

Opmerkingen

Bij foutdetectie zorgt een ongeldige reeks ervoor dat deze methode een ArgumentException uitzondering genereert. Zonder foutdetectie worden ongeldige reeksen genegeerd en wordt er geen uitzondering gegenereerd.

Als het bereik van bytes dat moet worden gedecodeerd, de bytevolgordemarkering (BOM) bevat en de bytematrix is geretourneerd door een methode van een niet-bombewust type, wordt het teken U+FFFE opgenomen in de tekenmatrix die door deze methode wordt geretourneerd. U kunt deze verwijderen door de String.TrimStart methode aan te roepen.

Gegevens die moeten worden geconverteerd, zoals gegevens die uit een stroom worden gelezen, zijn mogelijk alleen in opeenvolgende blokken beschikbaar. In dit geval of als de hoeveelheid gegevens zo groot is dat deze moet worden onderverdeeld in kleinere blokken, gebruikt u respectievelijk de DecoderGetDecoder of de Encoder opgegeven methode of de GetEncoder methode.

Van toepassing op

Zie ook