Прочитать на английском

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


Encoding.GetString Метод

Определение

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

Перегрузки

GetString(Byte[])

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

GetString(ReadOnlySpan<Byte>)

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

GetString(Byte*, Int32)

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

GetString(Byte[], Int32, Int32)

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

GetString(Byte[])

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

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

C#
public virtual string GetString (byte[] bytes);

Параметры

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) метод для выполнения декодирования.

C#
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.

В примере используется следующий текст, который должен быть сохранен в файле в кодировке UTF-8 с именем Utf8Example.txt.

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 .

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

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

.NET 9 и другие версии
Продукт Версии
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0

GetString(ReadOnlySpan<Byte>)

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

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

C#
public string GetString (ReadOnlySpan<byte> bytes);

Параметры

bytes
ReadOnlySpan<Byte>

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

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

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

Комментарии

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

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

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

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

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

.NET 9 и другие версии
Продукт Версии
.NET Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Standard 2.1

GetString(Byte*, Int32)

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

Важно!

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

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

C#
[System.CLSCompliant(false)]
[System.Security.SecurityCritical]
public string GetString (byte* bytes, int byteCount);
C#
[System.CLSCompliant(false)]
public string GetString (byte* bytes, int byteCount);
C#
[System.CLSCompliant(false)]
[System.Security.SecurityCritical]
[System.Runtime.InteropServices.ComVisible(false)]
public string GetString (byte* bytes, int byteCount);

Параметры

bytes
Byte*

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

byteCount
Int32

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

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

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

Атрибуты

Исключения

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

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

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

- и -

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

Комментарии

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

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

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

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

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

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

.NET 9 и другие версии
Продукт Версии
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0

GetString(Byte[], Int32, Int32)

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

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

C#
public virtual string GetString (byte[] bytes, int index, int count);

Параметры

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) метод для выполнения декодирования.

C#
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.

В примере используется следующий текст, который должен быть сохранен в файле в кодировке UTF-8 с именем Utf8Example.txt.

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Обсуждение приемов и рекомендаций по декодированию см. в разделе "Примечания" справочного раздела.

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

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

.NET 9 и другие версии
Продукт Версии
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0