Sdílet prostřednictvím


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

Definice

Dekóduje rozsah bajtů z pole bajtů 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[]

Pole bajtů obsahující posloupnost bajtů k dekódování.

index
Int32

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

count
Int32

Počet bajtů k dekódování.

Návraty

Obsahující String výsledky dekódování zadané posloupnosti bajtů.

Atributy

Výjimky

bytes je null.

index nebo count je menší než nula.

-nebo-

index a count neoznamují platnou oblast v bytessouboru .

Detekce chyb je povolená a bytes obsahuje neplatnou posloupnost bajtů.

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

-A-

DecoderFallback je nastavená na DecoderExceptionFallbackhodnotu .

Příklady

Následující příklad inicializuje pole voláním GetByteCount metody , která přesně určí, kolik bajtů je vyžadováno pro kódovaný řetězec, a poté přidá velikost značky pořadí bajtů (BOM). Příklad pak 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 zavolá metodu GetString k 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á značkou pořadí 16 bajtů U+FFFD. To znamená, že se tyto dva řetězce porovnávají jako nerovné a že pokud je řetězec výstupem, zobrazí se kusovník jako náhradní znak "?". Pokud chcete odebrat kusovník na začátku řetězce, můžete volat metodu String.TrimStart .

Poznámky

Při detekci chyb neplatná sekvence způsobí, že tato metoda vyvolá ArgumentException výjimku. Bez detekce chyb jsou neplatné sekvence ignorovány a nedojde k žádné výjimce.

Pokud rozsah bajtů, které mají být dekódovány zahrnuje značku pořadí bajtů (BOM) a bajtové pole bylo vráceno metodou typu nerozeznají bom, znak U+FFFE je zahrnut v matici znaků vrácená touto metodou. Můžete ho String.TrimStart odebrat voláním metody .

Data, která se mají převést, například data přečtená z datového proudu, můžou být k dispozici pouze v sekvenčních blocích. V takovém případě nebo pokud je množství dat tak velké, že je potřeba je rozdělit na menší bloky, použijte metodu Decoder nebo Encoder metodu GetDecoder poskytnutou GetEncoder metodou v uvedeném pořadí.

Platí pro

Viz také