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

Definice

Dekóduje rozsah bajtů z bajtového pole do řetězce.

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

Parametry

bytes
Byte[]

Bajtové pole obsahující posloupnost bajtů k dekódování.

index
Int32

Index prvního bajtu pro dekódování.

count
Int32

Počet bajtů, které se mají dekódovat.

Návraty

A String obsahující výsledky dekódování zadané sekvence bajtů.

Atributy

Výjimky

bytes je null.

index nebo count je menší než nula.

nebo

index a count neoznamujte platný rozsah v bytes.

Je povoleno zjišťování chyb a bytes obsahuje neplatnou posloupnost bajtů.

Došlo k záložnímu použití (další informace najdete v tématu Kódování znaků v .NET).

a

DecoderFallback je nastaveno na DecoderExceptionFallback.

Příklady

Následující příklad inicializuje pole voláním GetByteCount metody přesně, kolik bajtů je požadováno pro kódovaný řetězec a pak přidá velikost značky pořadí bajtů (BOM). Příklad potom volá metodu GetPreamble pro uložení kusovníku do pole před voláním GetBytes metody pro uložení zakódovaných bajtů do pole. Příklad pak volá metodu GetString dekódování řetězce.

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

Všimněte si, že v tomto případě se dekódovaný řetězec liší od původního řetězce, protože začíná 16bitovou značkou pořadí bajtů U+FFFD. To znamená, že tyto dva řetězce se budou porovnávat jako nerovné a že pokud je řetězec výstupem, zobrazí se jako náhradní znak "?". Chcete-li odebrat kusovník na začátku řetězce, můžete volat metodu String.TrimStart .

Poznámky

Při detekci chyb způsobí neplatná posloupnost vyvolání výjimky touto metodou ArgumentException . Bez detekce chyb se ignorují neplatné sekvence a nevyvolá se žádná výjimka.

Pokud rozsah bajtů, které se mají dekódovat, zahrnuje značku pořadí bajtů (BOM) a bajtové pole bylo vráceno metodou typu bez boM, znak U+FFFE je zahrnut do pole znaků vrácených touto metodou. Můžete ho odebrat voláním String.TrimStart metody.

Data, která se mají převést, například čtení dat ze streamu, můžou být k dispozici pouze v sekvenčních blocích. V tomto případě nebo pokud je množství dat tak velké, že je potřeba je rozdělit na menší bloky, použijte DecoderEncoder metodu GetDecoder nebo metodu nebo metodu GetEncoder .

Platí pro

Viz také