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

Определение

Декодирует диапазон байтов из массива байтов в строку.Decodes a range of bytes from a byte array into a string.

public:
 override System::String ^ GetString(cli::array <System::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
Public Overrides Function GetString (bytes As Byte(), index As Integer, count As Integer) As String

Параметры

bytes
Byte[]

Массив байтов, содержащий последовательность байтов, которую требуется декодировать.The byte array containing the sequence of bytes to decode.

index
Int32

Индекс первого декодируемого байта.The index of the first byte to decode.

count
Int32

Число байтов для декодирования.The number of bytes to decode.

Возвраты

Объект String, содержащий результаты декодирования заданной последовательности байтов.A String object containing the results of decoding the specified sequence of bytes.

Атрибуты

Исключения

bytes имеет значение null (Nothing).bytes is null (Nothing).

Значение параметраindex или count меньше нуля.index or count is less than zero.

- или --or- Параметры index и count не указывают допустимый диапазон в bytes.index and count do not denote a valid range in bytes.

Обнаружение ошибок включено, и параметр bytes содержит недопустимую последовательность байтов.Error detection is enabled, and bytes contains an invalid sequence of bytes.

Произошла отработка отказа (см. полное объяснение в статье Кодировка символов в .NET Framework)A fallback occurred (see Character Encoding in the .NET Framework for fuller explanation) - и --and- Параметру DecoderFallback задается значение DecoderExceptionFallback.DecoderFallback is set to DecoderExceptionFallback.

Примеры

В следующем примере массив инициализируется путем вызова GetByteCount метода, чтобы точно определить, сколько байтов требуется для закодированной строки, а затем добавить размер метки порядка байтов (BOM).The following example initializes an array by calling the GetByteCount method to determine exactly how many bytes are required for an encoded string and then adding the size of the byte order mark (BOM). Затем в примере вызывается GetPreamble метод для сохранения спецификации в массив перед GetBytes вызовом метода для сохранения закодированных байтов в массиве.The example then calls the GetPreamble method to store the BOM to the array before calling the GetBytes method to store the encoded bytes to the array. Затем в примере вызывается GetString метод для декодирования строки.The example then calls the GetString method to decode the string.

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.Note that in this case the decoded string differs from the original string, since it begins with a 16-bit byte order mark U+FFFD. Это означает, что две строки будут считаться неравными, и что если строка выводится, то спецификация будет отображаться как символ замены "?".This means that the two strings will compare as unequal, and that if the string is output, the BOM will be displayed as the replacement character "?". Чтобы удалить BOM в начале строки, можно вызвать String.TrimStart метод.To remove the BOM at the beginning of the string, you can call the String.TrimStart method.

Комментарии

При обнаружении ошибок недействительная последовательность приводит к тому, что ArgumentExceptionэтот метод выдает исключение.With error detection, an invalid sequence causes this method to throw a ArgumentException. Без обнаружения ошибок недопустимые последовательности пропускаются, и исключение не создается.Without error detection, invalid sequences are ignored, and no exception is thrown.

Если диапазон байтов для декодирования включает метку порядка байтов (BOM), а массив байтов был возвращен методом типа, не поддерживающим СПЕЦИФИКАЦИю, то символ U + ФФФЕ включается в массив символов, возвращаемый этим методом.If the range of bytes to be decoded includes the byte order mark (BOM) and the byte array was returned by a method of a non-BOM aware type, the character U+FFFE is included in the character array returned by this method. Его можно удалить, вызвав String.TrimStart метод.You can remove it by calling the String.TrimStart method.

Данные для преобразования, например данные, считываемые из потока, могут быть доступны только в последовательных блоках.Data to be converted, such as data read from a stream, might be available only in sequential blocks. В этом случае, или если объем данных настолько велик, что необходимо разделить Decoder на меньшие блоки, приложение должно использовать Encoder объект или, GetEncoder предоставленный GetDecoder методом или, соответственно.In this case, or if the amount of data is so large that it needs to be divided into smaller blocks, the application should use the Decoder or the Encoder object provided by the GetDecoder or the GetEncoder method, respectively.

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

Дополнительно