UnicodeEncoding.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 Объект, содержащий результаты декодирования указанной последовательности байтов.
- Атрибуты
Исключения
bytes is null (Nothing).
index или count меньше нуля.
–или–
index и count не обозначайте допустимый диапазон в bytes.
Обнаружение ошибок включено и bytes содержит недопустимую последовательность байтов.
Произошла резервная ошибка (дополнительные сведения см. в разделе "Кодировка символов" в .NET)
-и-
DecoderFallback задан как DecoderExceptionFallback.
Примеры
В следующем примере инициализируется массив, вызывая 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 будет отображаться в качестве замены символа "?". Чтобы удалить BOM в начале строки, можно вызвать String.TrimStart метод.
Комментарии
При обнаружении ошибок недопустимая последовательность приводит к возникновению ArgumentExceptionэтого метода. Без обнаружения ошибок недопустимые последовательности игнорируются, и исключение не возникает.
Если диапазон байтов, который требуется декодировать, включает метку порядка байтов (BOM) и массив байтов был возвращен методом типа, отличного от BOM, символ U+FFFE включается в массив символов, возвращаемый этим методом. Его можно удалить, вызвав String.TrimStart метод.
Данные для преобразования, такие как чтение данных из потока, могут быть доступны только в последовательных блоках. В этом случае или если объем данных настолько велик, что его необходимо разделить на меньшие блоки, приложение должно использовать Decoder объект или EncoderGetEncoder объект, предоставленный методом GetDecoder соответственно.