UnicodeEncoding.GetByteCount Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Вычисляет количество байтов, созданных путем кодирования набора символов.
Перегрузки
| Имя | Описание |
|---|---|
| GetByteCount(String) |
Вычисляет количество байтов, созданных путем кодирования символов в указанной строке. |
| GetByteCount(Char*, Int32) |
Вычисляет количество байтов, созданных путем кодирования набора символов, начиная с указанного указателя символов. |
| GetByteCount(Char[], Int32, Int32) |
Вычисляет количество байтов, созданных путем кодирования набора символов из указанного массива символов. |
GetByteCount(String)
Вычисляет количество байтов, созданных путем кодирования символов в указанной строке.
public:
override int GetByteCount(System::String ^ s);
public override int GetByteCount(string s);
override this.GetByteCount : string -> int
Public Overrides Function GetByteCount (s As String) As Integer
Параметры
- s
- String
Строка, содержащая набор символов для кодирования.
Возвращаемое значение
Количество байтов, созданных путем кодирования указанных символов.
Исключения
s равно null.
Результирующее число байтов больше максимального числа, которое может быть возвращено в виде целого числа.
Обнаружение ошибок включено и s содержит недопустимую последовательность символов.
Произошла резервная ошибка (дополнительные сведения см. в разделе "Кодировка символов" в .NET)
-и-
EncoderFallback задан как EncoderExceptionFallback.
Примеры
В следующем примере вызывается GetMaxByteCount методы и GetByteCount(String) методы для вычисления максимального и фактического количества байтов, необходимых для кодирования строки. Он также отображает фактическое количество байтов, необходимых для хранения потока байтов с меткой порядка байтов.
using System;
using System.Text;
class UTF8EncodingExample {
public static void Main() {
String chars = "UTF-16 Encoding Example";
Encoding unicode = Encoding.Unicode;
Console.WriteLine("Bytes needed to encode '{0}':", chars);
Console.WriteLine(" Maximum: {0}",
unicode.GetMaxByteCount(chars.Length));
Console.WriteLine(" Actual: {0}",
unicode.GetByteCount(chars));
Console.WriteLine(" Actual with BOM: {0}",
unicode.GetByteCount(chars) + unicode.GetPreamble().Length);
}
}
// The example displays the following output:
// Bytes needed to encode 'UTF-16 Encoding Example':
// Maximum: 48
// Actual: 46
// Actual with BOM: 48
Imports System.Text
Module Example
Public Sub Main()
Dim chars As String = "UTF-16 Encoding Example"
Dim unicode As Encoding = Encoding.Unicode
Console.WriteLine("Bytes needed to encode '{0}':", chars)
Console.WriteLine(" Maximum: {0}",
unicode.GetMaxByteCount(chars.Length))
Console.WriteLine(" Actual: {0}",
unicode.GetByteCount(chars))
Console.WriteLine(" Actual with BOM: {0}",
unicode.GetByteCount(chars) + unicode.GetPreamble().Length)
End Sub
End Module
' The example displays the following output:
' Bytes needed to encode 'UTF-16 Encoding Example':
' Maximum: 48
' Actual: 46
' Actual with BOM: 48
Комментарии
Чтобы вычислить точный размер массива, необходимый GetBytes для хранения результирующего байта, вызывается GetByteCount метод. Чтобы вычислить максимальный размер массива GetMaxByteCount , вызовите метод. Метод GetByteCount обычно выделяет меньше памяти, а GetMaxByteCount метод обычно выполняется быстрее.
При обнаружении ошибок недопустимая последовательность приводит к возникновению ArgumentExceptionэтого метода. Без обнаружения ошибок недопустимые последовательности игнорируются, и исключение не возникает.
Important
Чтобы убедиться, что кодированные байты декодируются должным образом при сохранении в виде файла или в виде потока, можно префиксировать поток закодированных байтов с предварительной записью. Вставка преамблирования в начале потока байтов (например, в начале ряда байтов, записываемых в файл), является ответственностью разработчика, а количество байтов в преамбле не отражается в значении, возвращаемом GetByteCount(String) методом.
См. также раздел
Применяется к
GetByteCount(Char*, Int32)
Внимание
Этот API несовместим с CLS.
Вычисляет количество байтов, созданных путем кодирования набора символов, начиная с указанного указателя символов.
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.Runtime.InteropServices.ComVisible(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)>]
override this.GetByteCount : nativeptr<char> * int -> int
[<System.CLSCompliant(false)>]
[<System.Runtime.InteropServices.ComVisible(false)>]
[<System.Security.SecurityCritical>]
override this.GetByteCount : nativeptr<char> * int -> int
[<System.CLSCompliant(false)>]
override this.GetByteCount : nativeptr<char> * int -> int
Параметры
- chars
- Char*
Указатель на первый символ для кодирования.
- count
- Int32
Число символов для кодирования.
Возвращаемое значение
Количество байтов, созданных путем кодирования указанных символов.
- Атрибуты
Исключения
chars равно null.
count меньше нуля.
–или–
Результирующее число байтов больше максимального числа, которое может быть возвращено в виде целого числа.
Обнаружение ошибок включено и chars содержит недопустимую последовательность символов.
Произошла резервная ошибка (дополнительные сведения см. в разделе "Кодировка символов" в .NET)
-и-
EncoderFallback задан как EncoderExceptionFallback.
Комментарии
Чтобы вычислить точный размер массива, который GetBytes требует хранения результирующего байта, вызывается GetByteCount метод. Чтобы вычислить максимальный размер массива GetMaxByteCount , вызовите метод. Метод GetByteCount обычно выделяет меньше памяти, а GetMaxByteCount метод обычно выполняется быстрее.
При обнаружении ошибок недопустимая последовательность приводит к возникновению ArgumentExceptionэтого метода. Без обнаружения ошибок недопустимые последовательности игнорируются, и исключение не возникает.
Important
Чтобы убедиться, что кодированные байты декодируются должным образом при сохранении в виде файла или в виде потока, можно префиксировать поток закодированных байтов с предварительной записью. Вставка преамблирования в начале потока байтов (например, в начале ряда байтов, записываемых в файл), является ответственностью разработчика, а количество байтов в преамбле не отражается в значении, возвращаемом 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
Число символов для кодирования.
Возвращаемое значение
Количество байтов, созданных путем кодирования указанных символов.
Исключения
chars is null (Nothing).
index или count меньше нуля.
–или–
index и count не обозначайте допустимый диапазон в chars.
–или–
Результирующее число байтов больше максимального числа, которое может быть возвращено в виде целого числа.
Обнаружение ошибок включено и chars содержит недопустимую последовательность символов.
Произошла резервная ошибка (дополнительные сведения см. в разделе "Кодировка символов" в .NET)
-и-
EncoderFallback задан как EncoderExceptionFallback.
Примеры
В следующем примере массив заполняется латинскими прописными и строчными символами и вызывается GetByteCount(Char[], Int32, Int32) метод для определения количества байтов, необходимых для кодирования символов латинского нижнего регистра. Затем отображаются эти сведения вместе с общим количеством байтов, необходимых при добавлении метки порядка байтов. Он сравнивает это число со значением, возвращаемым методом GetMaxByteCount , которое указывает максимальное количество байтов, необходимых для кодирования символов латинского нижнего регистра. В следующем примере массив заполняется сочетанием греческих и кириллических символов и вызывает 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 unicode = Encoding.Unicode;
// 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}",
unicode.GetMaxByteCount(lowercaseEnd - lowercaseStart + 1));
Console.WriteLine(" Actual: {0,5:N0}",
unicode.GetByteCount(chars, uppercaseEnd - uppercaseStart + 1,
lowercaseEnd - lowercaseStart + 1));
Console.WriteLine(" Actual with BOM: {0,5:N0}",
unicode.GetByteCount(chars, uppercaseEnd - uppercaseStart + 1,
lowercaseEnd - lowercaseStart + 1) +
unicode.GetPreamble().Length);
}
}
// The example displays the following output:
// Bytes needed for lowercase Latin characters:
// Maximum: 54
// Actual: 52
// Actual with BOM: 54
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 unicode As Encoding = Encoding.Unicode
' 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}",
unicode.GetMaxByteCount(lowercaseEnd - lowercaseStart + 1))
Console.WriteLine(" Actual: {0,5:N0}",
unicode.GetByteCount(chars, uppercaseEnd - uppercaseStart + 1,
lowercaseEnd - lowercaseStart + 1))
Console.WriteLine(" Actual with BOM: {0,5:N0}",
unicode.GetByteCount(chars, uppercaseEnd - uppercaseStart + 1,
lowercaseEnd - lowercaseStart + 1) +
unicode.GetPreamble().Length)
End Sub
End Module
' The example displays the following output:
' Bytes needed for lowercase Latin characters:
' Maximum: 54
' Actual: 52
' Actual with BOM: 54
Комментарии
Чтобы вычислить точный размер массива, необходимый GetBytes для хранения результирующего байта, приложение использует GetByteCount. Чтобы вычислить максимальный размер массива GetMaxByteCount , вызовите метод. Метод GetByteCount обычно выделяет меньше памяти, а GetMaxByteCount метод обычно выполняется быстрее.
При включенном обнаружении ошибок недопустимая последовательность приводит к возникновению ArgumentExceptionэтого метода. Без обнаружения ошибок недопустимые последовательности игнорируются, и исключение не возникает.
Чтобы убедиться, что кодированные байты декодируются должным образом при сохранении в виде файла или в виде потока, можно префиксировать поток закодированных байтов с предварительной записью. Вставка преамблирования в начале потока байтов (например, в начале ряда байтов, записываемых в файл), является ответственностью разработчика, а число байтов в преамбле не отражается в значении, возвращаемом GetByteCount(Char[], Int32, Int32) методом.