UTF8Encoding.GetString(Byte[], Int32, Int32) Метод

Определение

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

public:
 override System::String ^ GetString(cli::array <System::Byte> ^ bytes, int index, int count);
public override string GetString (byte[] bytes, int index, int count);
[System.Runtime.InteropServices.ComVisible(false)]
public override string GetString (byte[] bytes, int index, int count);
override this.GetString : byte[] * int * int -> string
[<System.Runtime.InteropServices.ComVisible(false)>]
override this.GetString : byte[] * int * int -> string
Public Overrides Function GetString (bytes As Byte(), index As Integer, count As Integer) As String

Параметры

bytes
Byte[]

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

index
Int32

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

count
Int32

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

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

String

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

Атрибуты

Исключения

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

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

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

Обнаружение ошибок включено, и параметр bytes содержит недопустимую последовательность байтов.

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

Примеры

В следующем примере инициализируется массив, вызывая GetByteCount метод, чтобы определить, сколько байтов требуется для закодированной строки, а затем добавьте размер метки порядка байтов (BOM). Затем в примере вызывается GetPreamble метод для хранения BOM в массиве перед вызовом GetBytes метода для хранения в массиве закодированных байтов. Затем в примере вызывается GetString метод для декодирования строки.

using System;
using System.Text;

public class Example
{
   public static void Main()
   {
      UTF8Encoding utf8 = new UTF8Encoding(true, true);

      String s = "It was the best of times, it was the worst of times...";

      // We need to dimension the array, since we'll populate it with 2 method calls.
      Byte[] bytes = new Byte[utf8.GetByteCount(s) + utf8.GetPreamble().Length];
      // Encode the string.
      Array.Copy(utf8.GetPreamble(), bytes, utf8.GetPreamble().Length);
      utf8.GetBytes(s, 0, s.Length, bytes, utf8.GetPreamble().Length);

      // Decode the byte array.
      String s2 = utf8.GetString(bytes, 0, bytes.Length);
      Console.WriteLine(s2);
   }
}
// The example displays the following output:
//        ?It was the best of times, it was the worst of times...
Imports System.Text

Module Example
   Public Sub Main()
      Dim utf8 As New UTF8Encoding(True, True)

      Dim s As String = "It was the best of times, it was the worst of times..."

      ' We need to dimension the array, since we'll populate it with 2 method calls.
      Dim bytes(utf8.GetByteCount(s) + utf8.GetPreamble().Length - 1) As Byte
      ' Encode the string.
      Array.Copy(utf8.GetPreamble(), bytes, utf8.GetPreamble().Length)
      utf8.GetBytes(s, 0, s.Length, bytes, utf8.GetPreamble().Length)

      ' Decode the byte array.
      Dim s2 As String = utf8.GetString(bytes, 0, bytes.Length)
      Console.WriteLine(s2)
   End Sub
End Module
' The example displays the following output:
'       ?It was the best of times, it was the worst of times...

Обратите внимание, что в этом случае декодированная строка отличается от исходной строки, так как она начинается с 16-разрядной метки порядка байтов U+FFFD. Это означает, что две строки будут сравниваться как неравные, и что если строка выводится, МОМ будет отображаться в качестве заменяющего символа "?". Чтобы удалить BOM в начале строки, можно вызвать String.TrimStart метод.

Комментарии

При обнаружении ошибок недопустимая последовательность приводит к возникновению ArgumentException исключения. Без обнаружения ошибок недопустимые последовательности игнорируются и исключение не возникает.

Если диапазон декодированных байтов включает метку порядка байтов (BOM) и массив байтов был возвращен методом типа, не поддерживающего BOM, символ U+FFFE включается в массив символов, возвращаемый этим методом. Его можно удалить, вызвав String.TrimStart метод.

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

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

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