Share via


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

Definice

Dekóduje oblast 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ů, které se mají dekódovat.

index
Int32

Index prvního bajtu, který se má dekódovat.

count
Int32

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

Návraty

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

Atributy

Výjimky

bytes je null (Nothing).

index nebo count je menší než nula.

-nebo-

index a count neoznamujte platnou oblast v bytessouboru .

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

Došlo k náhradnímu řešení (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 potřeba pro kódovaný řetězec, a pak přidá velikost značky pořadí bajtů (BOM). Příklad pak zavolá 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 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 dva řetězce se budou porovnávat 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 způsobí neplatná sekvence, že tato metoda vyvolá ArgumentExceptionchybu . Bez detekce chyb se neplatné sekvence ignorují a nedochází k žádné výjimce.

Pokud rozsah bajtů, které se mají dekódovat, zahrnuje značku pořadí bajtů (BOM) a pole bajtů bylo vráceno metodou typu, který nerozeznají bom, je znak U+FFFE 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 data přečtená 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 do menších bloků, měla by aplikace použít Decoder objekt nebo Encoder poskytnutý metodou GetDecoder nebo GetEncoder .

Platí pro

Viz také