Поделиться через


Encoding.GetString Метод

Определение

При переопределении в производном классе декодирует последовательность байтов в строку.

Перегрузки

GetString(Byte[])

При переопределении в производном классе декодирует все байты из указанного массива байтов в строку.

GetString(ReadOnlySpan<Byte>)

При переопределении в производном классе декодирует все байты из указанного диапазона байтов в строку.

GetString(Byte*, Int32)

При переопределении в производном классе декодирует указанное количество байтов начиная с указанного адреса в строку.

GetString(Byte[], Int32, Int32)

При переопределении в производном классе декодирует последовательность байтов из указанного массива байтов в строку.

GetString(Byte[])

Исходный код:
Encoding.cs
Исходный код:
Encoding.cs
Исходный код:
Encoding.cs

При переопределении в производном классе декодирует все байты из указанного массива байтов в строку.

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

Параметры

bytes
Byte[]

Массив байтов, содержащий последовательность байтов, которую требуется декодировать.

Возвращаемое значение

Строка, содержащая результаты декодирования заданной последовательности байтов.

Исключения

Массив байтов содержит недопустимые точки кода Юникод.

bytes имеет значение null.

Произошел откат (см. сведения о кодировке символов в .NET)

- и -

Параметру DecoderFallback задается значение DecoderExceptionFallback.

Примеры

В следующем примере считывается строка в кодировке UTF-8 из двоичного файла, представленного FileStream объектом. Для файлов размером менее 2 048 байт он считывает содержимое всего файла в массив байтов и вызывает GetString(Byte[]) метод для выполнения декодирования. Для больших файлов он считывает 2 048 байт за раз в массив байтов, вызывает Decoder.GetCharCount(Byte[], Int32, Int32) метод, чтобы определить, сколько символов содержится в массиве, а затем вызывает Decoder.GetChars(Byte[], Int32, Int32, Char[], Int32) метод для выполнения декодирования.

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.

В примере используется следующий текст, который должен быть сохранен в файле в кодировке UTF-8 с именем 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.

Комментарии

Если данные для преобразования доступны только в последовательных блоках (например, чтение данных из потока) или если объем данных настолько велик, что необходимо разделить на меньшие блоки, следует использовать Decoder объект, возвращаемый GetDecoder методом производного класса.

Encoding.GetCharsОбсуждение приемов и рекомендаций по декодированию см. в разделе "Примечания" справочного раздела.

Обратите внимание, что точное поведение GetString метода для конкретной Encoding реализации зависит от резервной стратегии, определенной для этого Encoding объекта. Дополнительные сведения см. в разделе "Выбор стратегии резервного использования" статьи Кодировка символов в .NET .

См. также раздел

Применяется к

GetString(ReadOnlySpan<Byte>)

Исходный код:
Encoding.cs
Исходный код:
Encoding.cs
Исходный код:
Encoding.cs

При переопределении в производном классе декодирует все байты из указанного диапазона байтов в строку.

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

Параметры

bytes
ReadOnlySpan<Byte>

Диапазон байтов только для чтения для декодирования в строку в Юникоде.

Возвращаемое значение

Строка, содержащая декодированные байты из предоставленного диапазона, доступного только для чтения.

Комментарии

GetStringМетод предназначен для оптимизации производительности. Вместо создания управляемого массива байтов, а затем его декодирования, можно вызвать этот метод без создания каких-либо промежуточных объектов.

Если данные для преобразования доступны только в последовательных блоках (например, чтение данных из потока) или если объем данных настолько велик, что необходимо разделить на меньшие блоки, следует использовать Decoder объект, возвращаемый GetDecoder методом производного класса.

Encoding.GetCharsОбсуждение приемов и рекомендаций по декодированию см. в разделе "Примечания" справочного раздела.

Обратите внимание, что точное поведение GetString метода для конкретной Encoding реализации зависит от резервной стратегии, определенной для этого Encoding объекта. Дополнительные сведения см. в разделе "Выбор стратегии резервного использования" статьи Кодировка символов в .NET .

Применяется к

GetString(Byte*, Int32)

Исходный код:
Encoding.cs
Исходный код:
Encoding.cs
Исходный код:
Encoding.cs

Важно!

Этот API несовместим с CLS.

При переопределении в производном классе декодирует указанное количество байтов начиная с указанного адреса в строку.

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

Параметры

bytes
Byte*

Указатель на массив байтов.

byteCount
Int32

Число байтов для декодирования.

Возвращаемое значение

Строка, содержащая результаты декодирования заданной последовательности байтов.

Атрибуты

Исключения

bytes является пустым указателем

Значение параметра byteCount меньше нуля.

Произошел откат (полное объяснение см. в статье Кодировка символов в .NET)

- и -

Параметру DecoderFallback задается значение DecoderExceptionFallback.

Комментарии

GetStringМетод предназначен для оптимизации производительности при наличии собственного указателя на массив байтов. Вместо создания управляемого массива байтов, а затем его декодирования, можно вызвать этот метод без создания каких-либо промежуточных объектов.

Если данные для преобразования доступны только в последовательных блоках (например, чтение данных из потока) или если объем данных настолько велик, что необходимо разделить на меньшие блоки, следует использовать Decoder объект, возвращаемый GetDecoder методом производного класса.

Encoding.GetCharsОбсуждение приемов и рекомендаций по декодированию см. в разделе "Примечания" справочного раздела.

Обратите внимание, что точное поведение GetString метода для конкретной Encoding реализации зависит от резервной стратегии, определенной для этого Encoding объекта. Дополнительные сведения см. в разделе "Выбор стратегии резервного использования" статьи Кодировка символов в .NET .

См. также раздел

Применяется к

GetString(Byte[], Int32, Int32)

Исходный код:
Encoding.cs
Исходный код:
Encoding.cs
Исходный код:
Encoding.cs

При переопределении в производном классе декодирует последовательность байтов из указанного массива байтов в строку.

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

Параметры

bytes
Byte[]

Массив байтов, содержащий последовательность байтов, которую требуется декодировать.

index
Int32

Индекс первого декодируемого байта.

count
Int32

Число байтов для декодирования.

Возвращаемое значение

Строка, содержащая результаты декодирования заданной последовательности байтов.

Исключения

Массив байтов содержит недопустимые точки кода Юникод.

bytes имеет значение null.

Значение параметра index или count меньше нуля.

-или-

Параметры index и count не указывают допустимый диапазон в bytes.

Произошел откат (см. сведения о кодировке символов в .NET)

- и -

Параметру DecoderFallback задается значение DecoderExceptionFallback.

Примеры

В следующем примере считывается строка в кодировке UTF-8 из двоичного файла, представленного FileStream объектом. Для файлов размером менее 2 048 байт он считывает содержимое всего файла в массив байтов и вызывает GetString(Byte[], Int32, Int32) метод для выполнения декодирования. Для больших файлов он считывает 2 048 байт за раз в массив байтов, вызывает Decoder.GetCharCount(Byte[], Int32, Int32) метод, чтобы определить, сколько символов содержится в массиве, а затем вызывает Decoder.GetChars(Byte[], Int32, Int32, Char[], Int32) метод для выполнения декодирования.

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.

В примере используется следующий текст, который должен быть сохранен в файле в кодировке UTF-8 с именем 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.

Комментарии

Если данные для преобразования доступны только в последовательных блоках (например, чтение данных из потока) или если объем данных настолько велик, что необходимо разделить на меньшие блоки, следует использовать Decoder или, Encoder предоставленный GetDecoder методом или GetEncoder методом, соответственно, для производного класса.

Encoding.GetCharsОбсуждение приемов и рекомендаций по декодированию см. в разделе "Примечания" справочного раздела.

См. также раздел

Применяется к