UnicodeEncoding.GetString(Byte[], Int32, Int32) Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
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 bytes
souboru .
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 bajtové pole bylo vráceno metodou typu, který nerozeznaje bom, je znak U+FFFE zahrnut do pole znaků vrácené 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 .