UTF8Encoding.GetByteCount Метод

Определение

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

Перегрузки

GetByteCount(ReadOnlySpan<Char>)

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

GetByteCount(String)

Вычисляет количество байтов, полученных при кодировании символов в заданном объекте String.

GetByteCount(Char*, Int32)

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

GetByteCount(Char[], Int32, Int32)

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

GetByteCount(ReadOnlySpan<Char>)

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

public:
 override int GetByteCount(ReadOnlySpan<char> chars);
public override int GetByteCount (ReadOnlySpan<char> chars);
override this.GetByteCount : ReadOnlySpan<char> -> int
Public Overrides Function GetByteCount (chars As ReadOnlySpan(Of Char)) As Integer

Параметры

chars
ReadOnlySpan<Char>

Диапазон, содержащий кодируемый набор символов.

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

Int32

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

Исключения

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

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

Комментарии

Чтобы вычислить точный размер, необходимый GetBytes для хранения результирующего байта, вызовите GetByteCount метод. Чтобы вычислить максимальный размер, вызовите GetMaxByteCount метод. Этот GetByteCount метод обычно выделяет меньше памяти, а GetMaxByteCount метод обычно выполняется быстрее.

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

Чтобы убедиться, что закодированные байты декодируются должным образом при сохранении в виде файла или в виде потока, можно префиксировать поток закодированных байтов с предварительной записью. Вставка преамблирования в начале потока байтов (например, в начале ряда байтов, записываемых в файл) является ответственностью разработчика, а количество байтов в преамбле не отражается в значении, возвращаемом методом GetByteCount .

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

GetByteCount(String)

Вычисляет количество байтов, полученных при кодировании символов в заданном объекте String.

public:
 override int GetByteCount(System::String ^ chars);
public override int GetByteCount (string chars);
override this.GetByteCount : string -> int
Public Overrides Function GetByteCount (chars As String) As Integer

Параметры

chars
String

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

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

Int32

Число байтов, полученных при кодировании заданных символов.

Исключения

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

Результирующее число байтов больше максимального количества, которое можно вернуть как целочисленное значение.

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

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

Примеры

В следующем примере вызываются GetMaxByteCount методы и GetByteCount(String) методы для вычисления максимального и фактического количества байтов, необходимых для кодирования строки. В нем также отображается фактическое количество байтов, необходимых для хранения потока байтов с меткой порядка байтов.

using System;
using System.Text;

class UTF8EncodingExample {
    public static void Main() {
        String chars = "UTF8 Encoding Example";
        Encoding utf8 = Encoding.UTF8;

        Console.WriteLine("Bytes needed to encode '{0}':", chars);
        Console.WriteLine("   Maximum:         {0}",
                          utf8.GetMaxByteCount(chars.Length));
        Console.WriteLine("   Actual:          {0}",
                          utf8.GetByteCount(chars));
        Console.WriteLine("   Actual with BOM: {0}",
                          utf8.GetByteCount(chars) + utf8.GetPreamble().Length);
    }
}
// The example displays the following output:
//       Bytes needed to encode 'UTF8 Encoding Example':
//          Maximum:         66
//          Actual:          21
//          Actual with BOM: 24
Imports System.Text

Module Example
    Public Sub Main()
        Dim chars As String = "UTF8 Encoding Example"
        Dim utf8 As Encoding = Encoding.UTF8

        Console.WriteLine("Bytes needed to encode '{0}':", chars)
        Console.WriteLine("   Maximum:         {0}",
                          utf8.GetMaxByteCount(chars.Length))
        Console.WriteLine("   Actual:          {0}",
                          utf8.GetByteCount(chars))
        Console.WriteLine("   Actual with BOM: {0}",
                          utf8.GetByteCount(chars) + utf8.GetPreamble().Length)
    End Sub
End Module
' The example displays the following output:
'       Bytes needed to encode 'UTF8 Encoding Example':
'          Maximum:         66
'          Actual:          21
'          Actual with BOM: 24

Комментарии

Чтобы вычислить точный размер массива, необходимый GetBytes для хранения результирующего байта, вызовите GetByteCount метод. Чтобы вычислить максимальный размер массива GetMaxByteCount , вызовите метод. Этот GetByteCount метод обычно выделяет меньше памяти, а GetMaxByteCount метод обычно выполняется быстрее.

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

Чтобы убедиться, что закодированные байты декодируются должным образом при сохранении в виде файла или в виде потока, можно префиксировать поток закодированных байтов с предварительной записью. Вставка преамблирования в начале потока байтов (например, в начале ряда байтов, записываемых в файл) является ответственностью разработчика, а количество байтов в преамбле не отражается в значении, возвращаемом методом GetByteCount .

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

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

GetByteCount(Char*, Int32)

Важно!

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

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

public:
 override int GetByteCount(char* chars, int count);
[System.CLSCompliant(false)]
[System.Security.SecurityCritical]
public override int GetByteCount (char* chars, int count);
[System.CLSCompliant(false)]
public override int GetByteCount (char* chars, int count);
[System.CLSCompliant(false)]
[System.Runtime.InteropServices.ComVisible(false)]
public override int GetByteCount (char* chars, int count);
[System.CLSCompliant(false)]
[System.Security.SecurityCritical]
[System.Runtime.InteropServices.ComVisible(false)]
public override int GetByteCount (char* chars, int count);
[<System.CLSCompliant(false)>]
[<System.Security.SecurityCritical>]
override this.GetByteCount : nativeptr<char> * int -> int
[<System.CLSCompliant(false)>]
override this.GetByteCount : nativeptr<char> * int -> int
[<System.CLSCompliant(false)>]
[<System.Runtime.InteropServices.ComVisible(false)>]
override this.GetByteCount : nativeptr<char> * int -> int
[<System.CLSCompliant(false)>]
[<System.Security.SecurityCritical>]
[<System.Runtime.InteropServices.ComVisible(false)>]
override this.GetByteCount : nativeptr<char> * int -> int

Параметры

chars
Char*

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

count
Int32

Число кодируемых символов.

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

Int32

Число байтов, полученных при кодировании заданных символов.

Атрибуты

Исключения

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

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

-или- Результирующее число байтов больше максимального количества, которое можно вернуть как целочисленное значение.

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

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

Комментарии

Чтобы вычислить точный размер массива GetBytes , необходимый методу для хранения результирующего байта GetByteCount , вызовите метод. Чтобы вычислить максимальный размер массива GetMaxByteCount , вызовите метод. Этот GetByteCount метод обычно выделяет меньше памяти, а GetMaxByteCount метод обычно выполняется быстрее.

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

Чтобы убедиться, что закодированные байты декодируются должным образом при сохранении в виде файла или в виде потока, можно префиксировать поток закодированных байтов с предварительной записью. Вставка преамблирования в начале потока байтов (например, в начале ряда байтов, записываемых в файл) является ответственностью разработчика, а количество байтов в преамбле не отражается в значении, возвращаемом методом GetByteCount .

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

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

GetByteCount(Char[], Int32, Int32)

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

public:
 override int GetByteCount(cli::array <char> ^ chars, int index, int count);
public override int GetByteCount (char[] chars, int index, int count);
override this.GetByteCount : char[] * int * int -> int
Public Overrides Function GetByteCount (chars As Char(), index As Integer, count As Integer) As Integer

Параметры

chars
Char[]

Массив символов, содержащий набор кодируемых символов.

index
Int32

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

count
Int32

Число кодируемых символов.

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

Int32

Число байтов, полученных при кодировании заданных символов.

Исключения

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

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

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

-или- Результирующее число байтов больше максимального количества, которое можно вернуть как целочисленное значение.

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

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

Примеры

В следующем примере массив заполняется латинскими прописными и строчными символами и вызывает GetByteCount(Char[], Int32, Int32) метод для определения количества байтов, необходимых для кодирования символов латинских строчных регистров. Затем эти сведения отображаются вместе с общим количеством байтов, необходимых при добавлении метки порядка байтов. Он сравнивает это число со значением, возвращаемым методом GetMaxByteCount , которое указывает максимальное количество байтов, необходимых для кодирования символов латинского нижнего регистра.

using System;
using System.Text;

public class Example
{
   public static void Main()
   {
      int uppercaseStart = 0x0041;
      int uppercaseEnd = 0x005a;
      int lowercaseStart = 0x0061;
      int lowercaseEnd = 0x007a;
      // Instantiate a UTF8 encoding object with BOM support.
      Encoding utf8 = new UTF8Encoding(true);

      // Populate array with characters.
      char[] chars = new char[lowercaseEnd - lowercaseStart + uppercaseEnd - uppercaseStart + 2];
      int index = 0;
      for (int ctr = uppercaseStart; ctr <= uppercaseEnd; ctr++) {
         chars[index] = (char)ctr;
         index++;
      }
      for (int ctr = lowercaseStart; ctr <= lowercaseEnd; ctr++) {
         chars[index] = (char)ctr;
         index++;
      }

      // Display the bytes needed for the lowercase characters.
      Console.WriteLine("Bytes needed for lowercase Latin characters:");
      Console.WriteLine("   Maximum:         {0,5:N0}",
                        utf8.GetMaxByteCount(lowercaseEnd - lowercaseStart + 1));
      Console.WriteLine("   Actual:          {0,5:N0}",
                        utf8.GetByteCount(chars, uppercaseEnd - uppercaseStart + 1,
                                          lowercaseEnd - lowercaseStart + 1));
      Console.WriteLine("   Actual with BOM: {0,5:N0}",
                        utf8.GetByteCount(chars, uppercaseEnd - uppercaseStart + 1,
                                          lowercaseEnd - lowercaseStart + 1) +
                                          utf8.GetPreamble().Length);
   }
}
// The example displays the following output:
//       Bytes needed for lowercase Latin characters:
//          Maximum:            81
//          Actual:             26
//          Actual with BOM:    29
Imports System.Text

Module Example
   Public Sub Main()
      Dim uppercaseStart As Integer = &h0041
      Dim uppercaseEnd As Integer = &h005a
      Dim lowercaseStart As Integer = &h0061
      Dim lowercaseEnd As Integer = &h007a
      ' Instantiate a UTF8 encoding object with BOM support.
      Dim utf8 As New UTF8Encoding(True)
      
      ' Populate array with characters.
      Dim chars(lowercaseEnd - lowercaseStart + uppercaseEnd - uppercaseStart + 1) As Char
      Dim index As Integer = 0
      For ctr As Integer = uppercaseStart To uppercaseEnd
         chars(index) = ChrW(ctr)
         index += 1
      Next
      For ctr As Integer = lowercaseStart To lowercaseEnd
         chars(index) = ChrW(ctr)
         index += 1
      Next

      ' Display the bytes needed for the lowercase characters.
        Console.WriteLine("Bytes needed for lowercase Latin characters:")
        Console.WriteLine("   Maximum:         {0,5:N0}",
                          utf8.GetMaxByteCount(lowercaseEnd - lowercaseStart + 1))
        Console.WriteLine("   Actual:          {0,5:N0}",
                          utf8.GetByteCount(chars, uppercaseEnd - uppercaseStart + 1,
                                            lowercaseEnd - lowercaseStart + 1))
        Console.WriteLine("   Actual with BOM: {0,5:N0}",
                          utf8.GetByteCount(chars, uppercaseEnd - uppercaseStart + 1,
                                            lowercaseEnd - lowercaseStart + 1) +
                                            utf8.GetPreamble().Length)
   End Sub
End Module
' The example displays the following output:
'       Bytes needed for lowercase Latin characters:
'          Maximum:            81
'          Actual:             26
'          Actual with BOM:    29

Комментарии

Чтобы вычислить точный размер массива, необходимый GetBytes для хранения результирующего байта, вызовите метод использования GetByteCount . Чтобы вычислить максимальный размер массива GetMaxByteCount , вызовите метод. Этот GetByteCount метод обычно выделяет меньше памяти, а GetMaxByteCount метод обычно выполняется быстрее.

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

Чтобы убедиться, что закодированные байты декодируются должным образом при сохранении в виде файла или в виде потока, можно префиксировать поток закодированных байтов с предварительной записью. Вставка преамблирования в начале потока байтов (например, в начале ряда байтов, записываемых в файл) является ответственностью разработчика, а количество байтов в преамбле не отражается в значении, возвращаемом методом GetByteCount .

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

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