UTF8Encoding.GetChars Metoda

Definicja

Dekoduje sekwencję bajtów do zestawu znaków.

Przeciążenia

GetChars(ReadOnlySpan<Byte>, Span<Char>)

Dekoduje określony zakres bajtów do określonego zakresu znaków.

GetChars(Byte*, Int32, Char*, Int32)

Dekoduje sekwencję bajtów rozpoczynającą się od określonego wskaźnika bajtów do zestawu znaków przechowywanych w określonym wskaźniku znaków.

GetChars(Byte[], Int32, Int32, Char[], Int32)

Dekoduje sekwencję bajtów z określonej tablicy bajtów do określonej tablicy znaków.

GetChars(ReadOnlySpan<Byte>, Span<Char>)

Źródło:
UTF8Encoding.cs
Źródło:
UTF8Encoding.cs
Źródło:
UTF8Encoding.cs

Dekoduje określony zakres bajtów do określonego zakresu znaków.

public:
 override int GetChars(ReadOnlySpan<System::Byte> bytes, Span<char> chars);
public override int GetChars (ReadOnlySpan<byte> bytes, Span<char> chars);
override this.GetChars : ReadOnlySpan<byte> * Span<char> -> int
Public Overrides Function GetChars (bytes As ReadOnlySpan(Of Byte), chars As Span(Of Char)) As Integer

Parametry

bytes
ReadOnlySpan<Byte>

Zakres zawierający bajty do dekodowania.

chars
Span<Char>

Zakres zawierający wynikowy zestaw znaków.

Zwraca

Rzeczywista liczba znaków zapisanych w pliku chars.

Uwagi

Aby obliczyć dokładny rozmiar wymagany przez GetChars program do przechowywania znaków wynikowych, wywołaj metodę GetCharCount . Aby obliczyć maksymalny rozmiar, wywołaj metodę GetMaxCharCount . Metoda GetCharCount zwykle przydziela mniej pamięci, podczas gdy GetMaxCharCount metoda zwykle wykonuje się szybciej.

W przypadku wykrywania błędów nieprawidłowa sekwencja powoduje, że ta metoda zgłasza ArgumentException wyjątek. Bez wykrywania błędów nieprawidłowe sekwencje są ignorowane i nie jest zgłaszany żaden wyjątek.

Jeśli zestaw bajtów do dekodowania zawiera znak kolejności bajtów (BOM), a zakres bajtów został zwrócony przez metodę typu innego niż BOM, znak U+FFFE jest uwzględniany w zakresie znaków zwracanych przez tę metodę. Możesz go usunąć, wywołując metodę String.TrimStart .

Dane do przekonwertowania, takie jak dane odczytywane ze strumienia, mogą być dostępne tylko w blokach sekwencyjnych. W takim przypadku lub jeśli ilość danych jest tak duża, że musi być podzielona na mniejsze bloki, użyj Decoder obiektu lub dostarczonego GetDecoder przez metodę lub EncoderGetEncoder metodę.

Dotyczy

GetChars(Byte*, Int32, Char*, Int32)

Źródło:
UTF8Encoding.cs
Źródło:
UTF8Encoding.cs
Źródło:
UTF8Encoding.cs

Ważne

Ten interfejs API nie jest zgodny ze specyfikacją CLS.

Dekoduje sekwencję bajtów rozpoczynającą się od określonego wskaźnika bajtów do zestawu znaków przechowywanych w określonym wskaźniku znaków.

public:
 override int GetChars(System::Byte* bytes, int byteCount, char* chars, int charCount);
[System.CLSCompliant(false)]
[System.Security.SecurityCritical]
public override int GetChars (byte* bytes, int byteCount, char* chars, int charCount);
[System.CLSCompliant(false)]
public override int GetChars (byte* bytes, int byteCount, char* chars, int charCount);
[System.CLSCompliant(false)]
[System.Runtime.InteropServices.ComVisible(false)]
public override int GetChars (byte* bytes, int byteCount, char* chars, int charCount);
[System.CLSCompliant(false)]
[System.Security.SecurityCritical]
[System.Runtime.InteropServices.ComVisible(false)]
public override int GetChars (byte* bytes, int byteCount, char* chars, int charCount);
[<System.CLSCompliant(false)>]
[<System.Security.SecurityCritical>]
override this.GetChars : nativeptr<byte> * int * nativeptr<char> * int -> int
[<System.CLSCompliant(false)>]
override this.GetChars : nativeptr<byte> * int * nativeptr<char> * int -> int
[<System.CLSCompliant(false)>]
[<System.Runtime.InteropServices.ComVisible(false)>]
override this.GetChars : nativeptr<byte> * int * nativeptr<char> * int -> int
[<System.CLSCompliant(false)>]
[<System.Security.SecurityCritical>]
[<System.Runtime.InteropServices.ComVisible(false)>]
override this.GetChars : nativeptr<byte> * int * nativeptr<char> * int -> int

Parametry

bytes
Byte*

Wskaźnik do pierwszego bajtu w celu dekodowania.

byteCount
Int32

Liczba bajtów do dekodowania.

chars
Char*

Wskaźnik do lokalizacji, w której należy rozpocząć pisanie wynikowego zestawu znaków.

charCount
Int32

Maksymalna liczba znaków do zapisania.

Zwraca

Rzeczywista liczba znaków zapisanych w lokalizacji wskazanej przez chars.

Atrybuty

Wyjątki

bytes to null.

-lub-

chars to null.

byteCount wartość lub charCount jest mniejsza niż zero.

Wykrywanie błędów jest włączone i bytes zawiera nieprawidłową sekwencję bajtów.

-lub-

charCount jest mniejsza niż wynikowa liczba znaków.

Wystąpił powrót (aby uzyskać więcej informacji, zobacz Kodowanie znaków na platformie .NET)

-I-

DecoderFallback parametr jest ustawiony na DecoderExceptionFallbackwartość .

Uwagi

Aby obliczyć dokładny rozmiar tablicy wymagany przez GetChars program do przechowywania znaków wynikowych, wywołaj metodę GetCharCount . Aby obliczyć maksymalny rozmiar tablicy, wywołaj metodę GetMaxCharCount . Metoda GetCharCount zwykle przydziela mniej pamięci, podczas gdy GetMaxCharCount metoda zwykle wykonuje się szybciej.

W przypadku wykrywania błędów nieprawidłowa sekwencja powoduje, że ta metoda zgłasza ArgumentException wyjątek. Bez wykrywania błędów nieprawidłowe sekwencje są ignorowane i nie jest zgłaszany żaden wyjątek.

Jeśli zakres bajtów do dekodowania zawiera znak kolejności bajtów (BOM), a tablica bajtów została zwrócona przez metodę typu innego niż BOM, znak U+FFFE jest uwzględniony w tablicy znaków zwracanej przez tę metodę. Możesz go usunąć, wywołując metodę String.TrimStart .

Dane do przekonwertowania, takie jak dane odczytywane ze strumienia, mogą być dostępne tylko w blokach sekwencyjnych. W takim przypadku lub jeśli ilość danych jest tak duża, że musi być podzielona na mniejsze bloki, użyj Decoder obiektu lub dostarczonego GetDecoder przez metodę lub EncoderGetEncoder metodę.

Zobacz też

Dotyczy

GetChars(Byte[], Int32, Int32, Char[], Int32)

Źródło:
UTF8Encoding.cs
Źródło:
UTF8Encoding.cs
Źródło:
UTF8Encoding.cs

Dekoduje sekwencję bajtów z określonej tablicy bajtów do określonej tablicy znaków.

public:
 override int GetChars(cli::array <System::Byte> ^ bytes, int byteIndex, int byteCount, cli::array <char> ^ chars, int charIndex);
public override int GetChars (byte[] bytes, int byteIndex, int byteCount, char[] chars, int charIndex);
override this.GetChars : byte[] * int * int * char[] * int -> int
Public Overrides Function GetChars (bytes As Byte(), byteIndex As Integer, byteCount As Integer, chars As Char(), charIndex As Integer) As Integer

Parametry

bytes
Byte[]

Tablica bajtów zawierająca sekwencję bajtów do dekodowania.

byteIndex
Int32

Indeks pierwszego bajtu do dekodowania.

byteCount
Int32

Liczba bajtów do dekodowania.

chars
Char[]

Tablica znaków zawierająca wynikowy zestaw znaków.

charIndex
Int32

Indeks, w którym należy rozpocząć pisanie wynikowego zestawu znaków.

Zwraca

Rzeczywista liczba znaków zapisanych w pliku chars.

Wyjątki

bytes to null.

-lub-

chars to null.

byteIndex lub byteCountcharIndex jest mniejsza niż zero.

-lub-

byteindex i byteCount nie oznaczają prawidłowego zakresu w elemecie bytes.

-lub-

charIndex nie jest prawidłowym indeksem w pliku chars.

Wykrywanie błędów jest włączone i bytes zawiera nieprawidłową sekwencję bajtów.

-lub-

chars nie ma wystarczającej pojemności od charIndex do końca tablicy, aby pomieścić wynikowe znaki.

Wystąpił powrót (aby uzyskać więcej informacji, zobacz Kodowanie znaków na platformie .NET)

-I-

DecoderFallback parametr jest ustawiony na DecoderExceptionFallbackwartość .

Przykłady

W poniższym przykładzie użyto GetChars metody , aby zdekodować zakres elementów w tablicy bajtów i zapisać wynik w tablicy znaków.

using namespace System;
using namespace System::Text;
using namespace System::Collections;
int main()
{
   array<Char>^chars;
   array<Byte>^bytes = {85,84,70,56,32,69,110,99,111,100,105,110,103,32,69,120,97,109,112,108,101};
   UTF8Encoding^ utf8 = gcnew UTF8Encoding;
   int charCount = utf8->GetCharCount( bytes, 2, 13 );
   chars = gcnew array<Char>(charCount);
   int charsDecodedCount = utf8->GetChars( bytes, 2, 13, chars, 0 );
   Console::WriteLine( "{0} characters used to decode bytes.", charsDecodedCount );
   Console::Write( "Decoded chars: " );
   IEnumerator^ myEnum = chars->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      Char c = safe_cast<Char>(myEnum->Current);
      Console::Write( "[{0}]", c.ToString() );
   }

   Console::WriteLine();
}
using System;
using System.Text;

class UTF8EncodingExample {
    public static void Main() {
        Char[] chars;
        Byte[] bytes = new Byte[] {
             85,  84,  70,  56,  32,  69, 110,
             99, 111, 100, 105, 110, 103,  32,
             69, 120,  97, 109, 112, 108, 101
        };

        UTF8Encoding utf8 = new UTF8Encoding();

        int charCount = utf8.GetCharCount(bytes, 2, 13);
        chars = new Char[charCount];
        int charsDecodedCount = utf8.GetChars(bytes, 2, 13, chars, 0);

        Console.WriteLine(
            "{0} characters used to decode bytes.", charsDecodedCount
        );

        Console.Write("Decoded chars: ");
        foreach (Char c in chars) {
            Console.Write("[{0}]", c);
        }
        Console.WriteLine();
    }
}
Imports System.Text

Class UTF8EncodingExample
    
    Public Shared Sub Main()
        Dim chars() As Char
        Dim bytes() As Byte = { _
            85,  84,  70,  56,  32,  69, 110, _
            99, 111, 100, 105, 110, 103,  32, _
            69, 120,  97, 109, 112, 108, 101 _
        }
        
        Dim utf8 As New UTF8Encoding()
        
        Dim charCount As Integer = utf8.GetCharCount(bytes, 2, 13)
        chars = New Char(charCount - 1) {}
        Dim charsDecodedCount As Integer = utf8.GetChars(bytes, 2, 13, chars, 0)
        
        Console.WriteLine("{0} characters used to decode bytes.", charsDecodedCount)
        
        Console.Write("Decoded chars: ")
        Dim c As Char
        For Each c In  chars
            Console.Write("[{0}]", c)
        Next c
        Console.WriteLine()
    End Sub
End Class

Uwagi

Aby obliczyć dokładny rozmiar tablicy wymagany przez GetChars program do przechowywania znaków wynikowych, wywołaj metodę GetCharCount . Aby obliczyć maksymalny rozmiar tablicy, wywołaj metodę GetMaxCharCount . Metoda GetCharCount zwykle przydziela mniej pamięci, podczas gdy GetMaxCharCount metoda zwykle wykonuje się szybciej.

W przypadku wykrywania błędów nieprawidłowa sekwencja powoduje, że ta metoda zgłasza ArgumentException wyjątek. Bez wykrywania błędów nieprawidłowe sekwencje są ignorowane i nie jest zgłaszany żaden wyjątek.

Jeśli zakres bajtów do dekodowania zawiera znak kolejności bajtów (BOM), a tablica bajtów została zwrócona przez metodę typu innego niż BOM, znak U+FFFE jest uwzględniony w tablicy znaków zwracanej przez tę metodę. Możesz go usunąć, wywołując metodę String.TrimStart .

Dane do przekonwertowania, takie jak dane odczytywane ze strumienia, mogą być dostępne tylko w blokach sekwencyjnych. W tym przypadku lub jeśli ilość danych jest tak duża, że musi być podzielona na mniejsze bloki, użyj Decoder metody lub Encoder dostarczonej GetDecoder odpowiednio przez metodę lub GetEncoder metodę.

Zobacz też

Dotyczy