Encoding.GetString Metoda

Definice

Při přepsání v odvozené třídě dekóduje posloupnost bajtů do řetězce.

Přetížení

Name Description
GetString(Byte[], Int32, Int32)

Při přepsání v odvozené třídě dekóduje posloupnost bajtů ze zadaného bajtového pole do řetězce.

GetString(Byte*, Int32)

Při přepsání v odvozené třídě dekóduje zadaný počet bajtů počínaje zadanou adresou do řetězce.

GetString(Byte[])

Při přepsání v odvozené třídě dekóduje všechny bajty v zadané bajtové pole do řetězce.

GetString(ReadOnlySpan<Byte>)

Při přepsání v odvozené třídě dekóduje všechny bajty v zadaném bajtu rozsahu do řetězce.

GetString(Byte[], Int32, Int32)

Při přepsání v odvozené třídě dekóduje posloupnost bajtů ze zadaného bajtového pole do řetězce.

public:
 virtual System::String ^ GetString(cli::array <System::Byte> ^ bytes, int index, int count);
public virtual string GetString(byte[] bytes, int index, int count);
abstract member GetString : byte[] * int * int -> string
override this.GetString : byte[] * int * int -> string
Public Overridable 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

Řetězec, který obsahuje výsledky dekódování zadané sekvence bajtů.

Výjimky

Bajtové pole obsahuje neplatné body kódu Unicode.

bytes je null.

index nebo count je menší než nula.

nebo

index a count neoznamujte platný rozsah v bytes.

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 načte řetězec kódování UTF-8 z binárního souboru, který je reprezentován objektem FileStream . U souborů, které jsou menší než 2 048 bajtů, přečte obsah celého souboru do bajtového pole a volá metodu GetString(Byte[], Int32, Int32) pro dekódování. U větších souborů čte 2 048 bajtů najednou do bajtového pole, volá metodu Decoder.GetCharCount(Byte[], Int32, Int32) , která určuje, kolik znaků je obsaženo v poli, a potom volá metodu Decoder.GetChars(Byte[], Int32, Int32, Char[], Int32) k provedení dekódování.

using System;
using System.IO;
using System.Text;

public class Example
{
   const int MAX_BUFFER_SIZE = 2048;
   static Encoding enc8 = Encoding.UTF8;
   static byte[] bytes = new byte[MAX_BUFFER_SIZE]; 

   public static void Main()
   {
      FileStream fStream = new FileStream(@".\Utf8Example.txt", FileMode.Open);
      string contents = null;
      
      // If file size is small, read in a single operation.
      if (fStream.Length <= MAX_BUFFER_SIZE) {
         int bytesRead = fStream.Read(bytes, 0, bytes.Length);
         contents = enc8.GetString(bytes, 0, bytesRead);
      }   
      // If file size exceeds buffer size, perform multiple reads.
      else {
         contents = ReadFromBuffer(fStream);
      }
      fStream.Close();
      Console.WriteLine(contents);
   }

    private static string ReadFromBuffer(FileStream fStream)
    {
        string output = String.Empty;
        Decoder decoder8 = enc8.GetDecoder();
      
        while (fStream.Position < fStream.Length) {
           int nBytes = fStream.Read(bytes, 0, bytes.Length);
           int nChars = decoder8.GetCharCount(bytes, 0, nBytes);
           char[] chars = new char[nChars];
           nChars = decoder8.GetChars(bytes, 0, nBytes, chars, 0);
           output += new String(chars, 0, nChars);                                                     
        }
        return output;
    }   
}
// The example displays the following output:
//     This is a UTF-8-encoded file that contains primarily Latin text, although it
//     does list the first twelve letters of the Russian (Cyrillic) alphabet:
//     
//     А б в г д е ё ж з и й к
//     
//     The goal is to save this file, then open and decode it as a binary stream.
Imports System.IO
Imports System.Text

Module Example
   Const MAX_BUFFER_SIZE As Integer = 2048
   
   Dim enc8 As Encoding = Encoding.UTF8
   Dim bytes(MAX_BUFFER_SIZE -1) As Byte
      
   Public Sub Main()
      Dim fStream As New FileStream(".\Utf8Example.txt", FileMode.Open)
      Dim contents As String = Nothing
      
      ' If file size is small, read in a single operation.
      If fStream.Length <= MAX_BUFFER_SIZE Then
         
         Dim bytesRead As Integer = fStream.Read(bytes, 0, bytes.Length)
         contents = enc8.GetString(bytes, 0, bytesRead)
      ' If file size exceeds buffer size, perform multiple reads.
      Else
         contents = ReadFromBuffer(fStream)
      End If
      fStream.Close()
      Console.WriteLine(contents)
   End Sub   

    Private Function ReadFromBuffer(fStream As FileStream) As String
        Dim bytes(MAX_BUFFER_SIZE) As Byte
        Dim output As String = String.Empty
        Dim decoder8 As Decoder = enc8.GetDecoder()
      
        Do While fStream.Position < fStream.Length
           Dim nBytes As Integer = fStream.Read(bytes, 0, bytes.Length)
           Dim nChars As Integer = decoder8.GetCharCount(bytes, 0, nBytes)
           Dim chars(nChars - 1) As Char
           nChars = decoder8.GetChars(bytes, 0, nBytes, chars, 0)
           output += New String(chars, 0, nChars)                                                     
        Loop
        Return output
    End Function
End Module
' The example displays the following output:
'     This is a UTF-8-encoded file that contains primarily Latin text, although it
'     does list the first twelve letters of the Russian (Cyrillic) alphabet:
'     
'     А б в г д е ё ж з и й к
'     
'     The goal is to save this file, then open and decode it as a binary stream.

Příklad používá následující text, který by měl být uložen do souboru s kódováním UTF-8 s názvem Utf8Example.txt.

This is a UTF-8-encoded file that contains primarily Latin text, although it
does list the first twelve letters of the Russian (Cyrillic) alphabet:

А б в г д е ё ж з и й к

The goal is to save this file, then open and decode it as a binary stream.

Poznámky

Pokud jsou data, která se mají převést, k dispozici pouze v sekvenčních blocích (jako jsou data načtená z datového proudu) nebo pokud je množství dat tak velké, že je potřeba je rozdělit na menší bloky, měli byste použít metodu Decoder nebo metodu Encoder poskytovanou metodou GetDecoder nebo GetEncoder v odvozené třídě.

V části Poznámky referenčního Encoding.GetChars tématu najdete diskuzi o technikách dekódování a aspektech.

Viz také

Platí pro

GetString(Byte*, Int32)

Důležité

Toto rozhraní API neodpovídá specifikaci CLS.

Při přepsání v odvozené třídě dekóduje zadaný počet bajtů počínaje zadanou adresou do řetězce.

public:
 System::String ^ GetString(System::Byte* bytes, int byteCount);
[System.CLSCompliant(false)]
[System.Security.SecurityCritical]
public string GetString(byte* bytes, int byteCount);
[System.CLSCompliant(false)]
[System.Security.SecurityCritical]
[System.Runtime.InteropServices.ComVisible(false)]
public string GetString(byte* bytes, int byteCount);
[System.CLSCompliant(false)]
public string GetString(byte* bytes, int byteCount);
[<System.CLSCompliant(false)>]
[<System.Security.SecurityCritical>]
member this.GetString : nativeptr<byte> * int -> string
[<System.CLSCompliant(false)>]
[<System.Security.SecurityCritical>]
[<System.Runtime.InteropServices.ComVisible(false)>]
member this.GetString : nativeptr<byte> * int -> string
[<System.CLSCompliant(false)>]
member this.GetString : nativeptr<byte> * int -> string

Parametry

bytes
Byte*

Ukazatel na bajtové pole.

byteCount
Int32

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

Návraty

Řetězec, který obsahuje výsledky dekódování zadané sekvence bajtů.

Atributy

Výjimky

bytes je ukazatel null.

Hodnota byteCount je menší než nula.

Došlo k záložnímu kódu (úplné vysvětlení najdete v tématu KódováníCharacter v .NET).

a

DecoderFallback je nastaveno na DecoderExceptionFallback.

Poznámky

Metoda GetString je navržena tak, aby optimalizovala výkon, pokud máte nativní ukazatel na pole bajtů. Místo vytvoření spravovaného bajtového pole a jeho dekódování můžete místo toho volat tuto metodu, aniž byste museli vytvářet žádné zprostředkující objekty.

Pokud jsou data, která se mají převést, k dispozici pouze v sekvenčních blocích (jako jsou data načtená z datového proudu) nebo pokud je množství dat tak velké, že je potřeba je rozdělit na menší bloky, měli byste použít Decoder objekt vrácený GetDecoder metodou odvozené třídy.

V části Poznámky referenčního Encoding.GetChars tématu najdete diskuzi o technikách dekódování a aspektech.

Všimněte si, že přesné chování GetString metody pro konkrétní Encoding implementaci závisí na záložní strategii definované pro tento Encoding objekt. Další informace najdete v části "Volba záložní strategie" v tématu KódováníCharacter v tématu .NET.

Viz také

Platí pro

GetString(Byte[])

Při přepsání v odvozené třídě dekóduje všechny bajty v zadané bajtové pole do řetězce.

public:
 virtual System::String ^ GetString(cli::array <System::Byte> ^ bytes);
public virtual string GetString(byte[] bytes);
abstract member GetString : byte[] -> string
override this.GetString : byte[] -> string
Public Overridable Function GetString (bytes As Byte()) As String

Parametry

bytes
Byte[]

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

Návraty

Řetězec, který obsahuje výsledky dekódování zadané sekvence bajtů.

Výjimky

Bajtové pole obsahuje neplatné body kódu Unicode.

bytes je null.

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 načte řetězec kódování UTF-8 z binárního souboru reprezentovaného objektem FileStream . U souborů, které jsou menší než 2 048 bajtů, přečte obsah celého souboru do bajtového pole a volá metodu GetString(Byte[]) pro dekódování. U větších souborů čte 2 048 bajtů najednou do bajtového pole, volá metodu Decoder.GetCharCount(Byte[], Int32, Int32) , která určuje, kolik znaků je obsaženo v poli, a potom volá metodu Decoder.GetChars(Byte[], Int32, Int32, Char[], Int32) k provedení dekódování.

using System;
using System.IO;
using System.Text;

public class Example
{
   const int MAX_BUFFER_SIZE = 2048;
   static Encoding enc8 = Encoding.UTF8;

   public static void Main()
   {
      FileStream fStream = new FileStream(@".\Utf8Example.txt", FileMode.Open);
      string contents = null;
      
      // If file size is small, read in a single operation.
      if (fStream.Length <= MAX_BUFFER_SIZE) {
         Byte[] bytes = new Byte[fStream.Length];
         fStream.Read(bytes, 0, bytes.Length);
         contents = enc8.GetString(bytes);
      }
      // If file size exceeds buffer size, perform multiple reads.
      else {
         contents = ReadFromBuffer(fStream);
      }
      fStream.Close();
      Console.WriteLine(contents);
   }

   private static string ReadFromBuffer(FileStream fStream)
   {
        Byte[] bytes = new Byte[MAX_BUFFER_SIZE];
        string output = String.Empty;
        Decoder decoder8 = enc8.GetDecoder();
      
        while (fStream.Position < fStream.Length) {
           int nBytes = fStream.Read(bytes, 0, bytes.Length);
           int nChars = decoder8.GetCharCount(bytes, 0, nBytes);
           char[] chars = new char[nChars];
           nChars = decoder8.GetChars(bytes, 0, nBytes, chars, 0);
           output += new String(chars, 0, nChars);                                                     
        }
        return output;
    }
}
// The example displays the following output:
//     This is a UTF-8-encoded file that contains primarily Latin text, although it
//     does list the first twelve letters of the Russian (Cyrillic) alphabet:
//     
//     А б в г д е ё ж з и й к
//     
//     The goal is to save this file, then open and decode it as a binary stream.
Imports System.IO
Imports System.Text

Module Example
   Const MAX_BUFFER_SIZE As Integer = 2048
   
   Dim enc8 As Encoding = Encoding.UTF8
      
   Public Sub Main()
      Dim fStream As New FileStream(".\Utf8Example.txt", FileMode.Open)
      Dim contents As String = Nothing
      
      ' If file size is small, read in a single operation.
      If fStream.Length <= MAX_BUFFER_SIZE Then
         Dim bytes(CInt(fStream.Length) - 1) As Byte
         fStream.Read(bytes, 0, bytes.Length)
         contents = enc8.GetString(bytes)
      ' If file size exceeds buffer size, perform multiple reads.
      Else
         contents = ReadFromBuffer(fStream)
      End If
      fStream.Close()
      Console.WriteLine(contents)
   End Sub   

    Private Function ReadFromBuffer(fStream As FileStream) As String
        Dim bytes(MAX_BUFFER_SIZE) As Byte
        Dim output As String = String.Empty
        Dim decoder8 As Decoder = enc8.GetDecoder()
      
        Do While fStream.Position < fStream.Length
           Dim nBytes As Integer = fStream.Read(bytes, 0, bytes.Length)
           Dim nChars As Integer = decoder8.GetCharCount(bytes, 0, nBytes)
           Dim chars(nChars - 1) As Char
           nChars = decoder8.GetChars(bytes, 0, nBytes, chars, 0)
           output += New String(chars, 0, nChars)                                                     
        Loop
        Return output
    End Function
End Module
' The example displays the following output:
'     This is a UTF-8-encoded file that contains primarily Latin text, although it
'     does list the first twelve letters of the Russian (Cyrillic) alphabet:
'     
'     ? ? ? ? ? ? ? ? ? ? ? ?
'     
'     The goal is to save this file, then open and decode it as a binary stream.

Příklad používá následující text, který by měl být uložen do souboru s kódováním UTF-8 s názvem Utf8Example.txt.

This is a UTF-8-encoded file that contains primarily Latin text, although it
does list the first twelve letters of the Russian (Cyrillic) alphabet:

А б в г д е ё ж з и й к

The goal is to save this file, then open and decode it as a binary stream.

Poznámky

Pokud jsou data, která se mají převést, k dispozici pouze v sekvenčních blocích (jako jsou data načtená z datového proudu) nebo pokud je množství dat tak velké, že je potřeba je rozdělit na menší bloky, měli byste použít Decoder objekt vrácený GetDecoder metodou odvozené třídy.

V části Poznámky referenčního Encoding.GetChars tématu najdete diskuzi o technikách dekódování a aspektech.

Všimněte si, že přesné chování GetString metody pro konkrétní Encoding implementaci závisí na záložní strategii definované pro tento Encoding objekt. Další informace najdete v části "Volba záložní strategie" v tématu KódováníCharacter v tématu .NET.

Viz také

Platí pro

GetString(ReadOnlySpan<Byte>)

Při přepsání v odvozené třídě dekóduje všechny bajty v zadaném bajtu rozsahu do řetězce.

public:
 System::String ^ GetString(ReadOnlySpan<System::Byte> bytes);
public string GetString(ReadOnlySpan<byte> bytes);
member this.GetString : ReadOnlySpan<byte> -> string
Public Function GetString (bytes As ReadOnlySpan(Of Byte)) As String

Parametry

bytes
ReadOnlySpan<Byte>

Bajt jen pro čtení, který dekóduje řetězec Unicode.

Návraty

Řetězec, který obsahuje dekódované bajty z poskytnutého rozsahu jen pro čtení.

Poznámky

Metoda GetString je navržená tak, aby optimalizovala výkon. Místo vytvoření spravovaného bajtového pole a jeho dekódování můžete místo toho volat tuto metodu, aniž byste museli vytvářet žádné zprostředkující objekty.

Pokud jsou data, která se mají převést, k dispozici pouze v sekvenčních blocích (jako jsou data načtená z datového proudu) nebo pokud je množství dat tak velké, že je potřeba je rozdělit na menší bloky, měli byste použít Decoder objekt vrácený GetDecoder metodou odvozené třídy.

V části Poznámky referenčního Encoding.GetChars tématu najdete diskuzi o technikách dekódování a aspektech.

Všimněte si, že přesné chování GetString metody pro konkrétní Encoding implementaci závisí na záložní strategii definované pro tento Encoding objekt. Další informace najdete v části "Volba záložní strategie" v tématu KódováníCharacter v tématu .NET.

Platí pro