Sdílet prostřednictvím


Encoding.GetString Metoda

Definice

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

Přetížení

GetString(Byte[])

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

GetString(ReadOnlySpan<Byte>)

Při přepsání v odvozené třídě dekóduje všechny bajty v zadaném rozsahu bajtu 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[], Int32, Int32)

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

GetString(Byte[])

Zdroj:
Encoding.cs
Zdroj:
Encoding.cs
Zdroj:
Encoding.cs

Při přepsání v odvozené třídě dekóduje všechny bajty v zadaném bajtovém poli 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[]

Pole bajtů obsahující posloupnost bajtů, které se mají dekódovat.

Návraty

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

Výjimky

Pole bajtů obsahuje neplatné body kódu Unicode.

bytes je null.

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 čte řetězec kódovaný 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 pole bajtů a zavolá metodu GetString(Byte[]) pro dekódování. U větších souborů přečte do pole bajtů 2 048 bajtů najednou, zavolá metodu Decoder.GetCharCount(Byte[], Int32, Int32) , která určí, kolik znaků je obsaženo v poli, a pak zavolá metodu Decoder.GetChars(Byte[], Int32, Int32, Char[], Int32) , která provede 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 (například v datech přečtených 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.

Informace o Encoding.GetChars technikách a aspektech dekódování najdete v části Poznámky v referenčním tématu.

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í znaků v .NET .

Viz také

Platí pro

GetString(ReadOnlySpan<Byte>)

Zdroj:
Encoding.cs
Zdroj:
Encoding.cs
Zdroj:
Encoding.cs

Při přepsání v odvozené třídě dekóduje všechny bajty v zadaném rozsahu bajtu 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>

Rozsah bajtů jen pro čtení pro dekódování řetězce 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 pole bajtů a jeho dekódování můžete místo toho volat tuto metodu bez nutnosti vytvářet zprostředkující objekty.

Pokud jsou data, která se mají převést, k dispozici pouze v sekvenčních blocích (například v datech přečtených 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.

Informace o Encoding.GetChars technikách a aspektech dekódování najdete v části Poznámky v referenčním tématu.

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í znaků v .NET .

Platí pro

GetString(Byte*, Int32)

Zdroj:
Encoding.cs
Zdroj:
Encoding.cs
Zdroj:
Encoding.cs

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)]
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)>]
[<System.Security.SecurityCritical>]
member this.GetString : nativeptr<byte> * int -> string
[<System.CLSCompliant(false)>]
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

Parametry

bytes
Byte*

Ukazatel na pole bajtů.

byteCount
Int32

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

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 obnovení (úplné vysvětlení najdete v tématu Kódování znaků v .NET).

-A-

DecoderFallback je nastavená na DecoderExceptionFallbackhodnotu .

Poznámky

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

Pokud jsou data, která se mají převést, k dispozici pouze v sekvenčních blocích (například v datech přečtených 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.

Informace o Encoding.GetChars technikách a aspektech dekódování najdete v části Poznámky v referenčním tématu.

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í znaků v .NET .

Viz také

Platí pro

GetString(Byte[], Int32, Int32)

Zdroj:
Encoding.cs
Zdroj:
Encoding.cs
Zdroj:
Encoding.cs

Při přepsání v odvozené třídě dekóduje posloupnost bajtů ze zadaného pole bajtů 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[]

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

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

Výjimky

Pole bajtů obsahuje neplatné body kódu Unicode.

bytes je null.

index nebo count je menší než nula.

-nebo-

index a count neoznamujte platnou oblast v bytessouboru .

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 č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 pole bajtů a zavolá metodu GetString(Byte[], Int32, Int32) pro dekódování. U větších souborů přečte do pole bajtů 2 048 bajtů najednou, zavolá metodu Decoder.GetCharCount(Byte[], Int32, Int32) , která určí, kolik znaků je obsaženo v poli, a pak zavolá metodu Decoder.GetChars(Byte[], Int32, Int32, Char[], Int32) , která provede 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 (například 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 metodu nebo Encoder metodu poskytnutou GetDecoder metodou nebo GetEncoder metodou odvozené třídy.

Informace o Encoding.GetChars technikách a aspektech dekódování najdete v části Poznámky v referenčním tématu.

Viz také

Platí pro