UnicodeEncoding Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Представляет кодировку UTF-16 символов Юникода.
public ref class UnicodeEncoding : System::Text::Encoding
public class UnicodeEncoding : System.Text.Encoding
[System.Serializable]
public class UnicodeEncoding : System.Text.Encoding
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public class UnicodeEncoding : System.Text.Encoding
type UnicodeEncoding = class
inherit Encoding
[<System.Serializable>]
type UnicodeEncoding = class
inherit Encoding
[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type UnicodeEncoding = class
inherit Encoding
Public Class UnicodeEncoding
Inherits Encoding
- Наследование
- Атрибуты
Примеры
В следующем примере показано, как кодировать строку символов Юникода в массив байтов с помощью UnicodeEncoding объекта. Массив байтов декодируется в строку, чтобы продемонстрировать отсутствие потери данных.
using System;
using System.Text;
class UnicodeEncodingExample {
public static void Main() {
// The encoding.
UnicodeEncoding unicode = new UnicodeEncoding();
// Create a string that contains Unicode characters.
String unicodeString =
"This Unicode string contains two characters " +
"with codes outside the traditional ASCII code range, " +
"Pi (\u03a0) and Sigma (\u03a3).";
Console.WriteLine("Original string:");
Console.WriteLine(unicodeString);
// Encode the string.
Byte[] encodedBytes = unicode.GetBytes(unicodeString);
Console.WriteLine();
Console.WriteLine("Encoded bytes:");
foreach (Byte b in encodedBytes) {
Console.Write("[{0}]", b);
}
Console.WriteLine();
// Decode bytes back to string.
// Notice Pi and Sigma characters are still present.
String decodedString = unicode.GetString(encodedBytes);
Console.WriteLine();
Console.WriteLine("Decoded bytes:");
Console.WriteLine(decodedString);
}
}
Imports System.Text
Imports Microsoft.VisualBasic.Strings
Class UnicodeEncodingExample
Public Shared Sub Main()
' The encoding.
Dim uni As New UnicodeEncoding()
' Create a string that contains Unicode characters.
Dim unicodeString As String = _
"This Unicode string contains two characters " & _
"with codes outside the traditional ASCII code range, " & _
"Pi (" & ChrW(928) & ") and Sigma (" & ChrW(931) & ")."
Console.WriteLine("Original string:")
Console.WriteLine(unicodeString)
' Encode the string.
Dim encodedBytes As Byte() = uni.GetBytes(unicodeString)
Console.WriteLine()
Console.WriteLine("Encoded bytes:")
Dim b As Byte
For Each b In encodedBytes
Console.Write("[{0}]", b)
Next b
Console.WriteLine()
' Decode bytes back to string.
' Notice Pi and Sigma characters are still present.
Dim decodedString As String = uni.GetString(encodedBytes)
Console.WriteLine()
Console.WriteLine("Decoded bytes:")
Console.WriteLine(decodedString)
End Sub
End Class
В следующем примере используется та же строка, что и предыдущая, за исключением того, что она записывает кодированные байты в файл и префиксирует поток байтов с меткой порядка байтов (BOM). Затем он считывает файл двумя разными способами: в виде текстового StreamReader файла с помощью объекта, а также в виде двоичного файла. Как и ожидалось, ни новая строка чтения не включает BOM.
using System;
using System.IO;
using System.Text;
public class Example
{
public static void Main()
{
// Create a UTF-16 encoding that supports a BOM.
Encoding unicode = new UnicodeEncoding();
// A Unicode string with two characters outside an 8-bit code range.
String unicodeString =
"This Unicode string has 2 characters outside the " +
"ASCII range: \n" +
"Pi (\u03A0)), and Sigma (\u03A3).";
Console.WriteLine("Original string:");
Console.WriteLine(unicodeString);
Console.WriteLine();
// Encode the string.
Byte[] encodedBytes = unicode.GetBytes(unicodeString);
Console.WriteLine("The encoded string has {0} bytes.\n",
encodedBytes.Length);
// Write the bytes to a file with a BOM.
var fs = new FileStream(@".\UTF8Encoding.txt", FileMode.Create);
Byte[] bom = unicode.GetPreamble();
fs.Write(bom, 0, bom.Length);
fs.Write(encodedBytes, 0, encodedBytes.Length);
Console.WriteLine("Wrote {0} bytes to the file.\n", fs.Length);
fs.Close();
// Open the file using StreamReader.
var sr = new StreamReader(@".\UTF8Encoding.txt");
String newString = sr.ReadToEnd();
sr.Close();
Console.WriteLine("String read using StreamReader:");
Console.WriteLine(newString);
Console.WriteLine();
// Open the file as a binary file and decode the bytes back to a string.
fs = new FileStream(@".\UTF8Encoding.txt", FileMode.Open);
Byte[] bytes = new Byte[fs.Length];
fs.Read(bytes, 0, (int)fs.Length);
fs.Close();
String decodedString = unicode.GetString(bytes);
Console.WriteLine("Decoded bytes:");
Console.WriteLine(decodedString);
}
}
// The example displays the following output:
// Original string:
// This Unicode string has 2 characters outside the ASCII range:
// Pi (π), and Sigma (Σ).
//
// The encoded string has 172 bytes.
//
// Wrote 174 bytes to the file.
//
// String read using StreamReader:
// This Unicode string has 2 characters outside the ASCII range:
// Pi (π), and Sigma (Σ).
//
// Decoded bytes:
// This Unicode string has 2 characters outside the ASCII range:
// Pi (π), and Sigma (Σ).
Imports System.IO
Imports System.Text
Class Example
Public Shared Sub Main()
' Create a UTF-16 encoding that supports a BOM.
Dim unicode As New UnicodeEncoding()
' A Unicode string with two characters outside an 8-bit code range.
Dim unicodeString As String = _
"This Unicode string has 2 characters outside the " &
"ASCII range: " & vbCrLf &
"Pi (" & ChrW(&h03A0) & "), and Sigma (" & ChrW(&h03A3) & ")."
Console.WriteLine("Original string:")
Console.WriteLine(unicodeString)
Console.WriteLine()
' Encode the string.
Dim encodedBytes As Byte() = unicode.GetBytes(unicodeString)
Console.WriteLine("The encoded string has {0} bytes.",
encodedBytes.Length)
Console.WriteLine()
' Write the bytes to a file with a BOM.
Dim fs As New FileStream(".\UnicodeEncoding.txt", FileMode.Create)
Dim bom() As Byte = unicode.GetPreamble()
fs.Write(bom, 0, bom.Length)
fs.Write(encodedBytes, 0, encodedBytes.Length)
Console.WriteLine("Wrote {0} bytes to the file.", fs.Length)
fs.Close()
Console.WriteLine()
' Open the file using StreamReader.
Dim sr As New StreamReader(".\UnicodeEncoding.txt")
Dim newString As String = sr.ReadToEnd()
sr.Close()
Console.WriteLine("String read using StreamReader:")
Console.WriteLine(newString)
Console.WriteLine()
' Open the file as a binary file and decode the bytes back to a string.
fs = new FileStream(".\UnicodeEncoding.txt", FileMode.Open)
Dim bytes(fs.Length - 1) As Byte
fs.Read(bytes, 0, fs.Length)
fs.Close()
Dim decodedString As String = unicode.GetString(bytes)
Console.WriteLine("Decoded bytes:")
Console.WriteLine(decodedString)
End Sub
End Class
' The example displays the following output:
' Original string:
' This Unicode string has 2 characters outside the ASCII range:
' Pi (π), and Sigma (Σ).
'
' The encoded string has 172 bytes.
'
' Wrote 174 bytes to the file.
'
' String read using StreamReader:
' This Unicode string has 2 characters outside the ASCII range:
' Pi (π), and Sigma (Σ).
'
' Decoded bytes:
' This Unicode string has 2 characters outside the ASCII range:
' Pi (π), and Sigma (Σ).
Комментарии
Кодировка — это процесс преобразования набора символов Юникода в последовательность байтов. Декодирование — это процесс преобразования последовательности закодированных байтов в набор символов Юникода.
Стандарт Юникод назначает кодовую точку (число) каждому символу в каждом поддерживаемом скрипте. Формат преобразования Юникода (UTF) — это способ кодирования этой кодовой точки. Стандарт Юникода использует следующие UTFs:
UTF-8, представляющий каждую точку кода в виде последовательности от одного до четырех байтов.
UTF-16, представляющий каждую точку кода в виде последовательности из двух до двух 16-разрядных целых чисел.
UTF-32, представляющий каждую кодовую точку в виде 32-разрядного целого числа.
Дополнительные сведения о UTFs и других кодировках, поддерживаемых System.Text, см. в разделе "Кодировка символов" в .NET Framework.
Класс UnicodeEncoding представляет кодировку UTF-16. Кодировщик может использовать либо большой байтовый порядок байтов (наиболее значимый байт первый), либо маленький байтовый порядок байтов (наименее значимый байт первым). Например, латинская буква буквы A (кодовая точка U+0041) сериализуется следующим образом (в шестнадцатеричном формате):
Порядок байтов больших байтов: 00 00 00 41
Маленький байтовый порядок байтов: 41 00 00 00
Как правило, более эффективно хранить символы Юникода с помощью собственного порядка байтов определенной платформы. Например, лучше использовать младший байтовый порядок на платформах с младшим порядком байтов, таких как компьютеры Intel. Класс UnicodeEncoding соответствует кодовой странице Windows 1200 (маленький байтовый порядок байтов) и 1201 (байтовый порядок больших байтов). Вы можете определить "endianness" определенной архитектуры, вызвав BitConverter.IsLittleEndian метод.
UnicodeEncoding При необходимости объект предоставляет метку порядка байтов (BOM), которая представляет собой массив байтов, который можно префиксировать в последовательность байтов, полученную из процесса кодирования. Если преамблирование содержит метку порядка байтов (BOM), она помогает декодеру определить порядок байтов и формат преобразования или UTF.
UnicodeEncoding Если экземпляр настроен для предоставления BOM, его можно получить, вызвав GetPreamble метод. В противном случае метод возвращает пустой массив. Обратите внимание, что даже если UnicodeEncoding объект настроен для поддержки BOM, необходимо включить BOM в начале закодированного потока байтов в соответствии с соответствующим образом; методы UnicodeEncoding кодирования класса не делают это автоматически.
Предостережение
Чтобы включить обнаружение ошибок и сделать экземпляр класса более безопасным, необходимо создать UnicodeEncoding экземпляр объекта, вызвав UnicodeEncoding(Boolean, Boolean, Boolean) конструктор и задав его throwOnInvalidBytes аргумент true. При обнаружении ошибок метод, который обнаруживает недопустимую последовательность символов или байтов ArgumentException, вызывает исключение. Без обнаружения ошибок исключение не возникает, а недопустимая последовательность обычно игнорируется.
Вы можете создать экземпляр UnicodeEncoding объекта несколькими способами в зависимости от того, нужно ли ему предоставить метку порядка байтов (BOM), требуется ли кодировка big-endian или little-endian, а также включение обнаружения ошибок. В следующей таблице перечислены UnicodeEncoding конструкторы и Encoding свойства, возвращающие UnicodeEncoding объект.
| Член | Порядок байтов | БОМ | Определение ошибки |
|---|---|---|---|
| BigEndianUnicode | Биг-эндиан | Yes | Нет (резервный вариант замены) |
| Encoding.Unicode | Маленький эндиан | Yes | Нет (резервный вариант замены) |
| UnicodeEncoding.UnicodeEncoding() | Маленький эндиан | Yes | Нет (резервный вариант замены) |
| UnicodeEncoding(Boolean, Boolean) | Configurable | Configurable | Нет (резервный вариант замены) |
| UnicodeEncoding.UnicodeEncoding(Boolean, Boolean, Boolean) | Configurable | Configurable | Configurable |
Метод GetByteCount определяет, сколько байтов приводит к кодированию набора символов Юникода, а GetBytes метод выполняет фактическую кодировку.
Аналогичным образом, GetCharCount метод определяет, сколько символов приводит к декодированию последовательности байтов, а GetCharsGetString методы выполняют фактическое декодирование.
Для кодировщика или декодировщика, который может сохранять сведения о состоянии при кодировании или декодировании данных, охватывающих несколько блоков (например, строка из 1 миллиона символов, закодированных в 100 000 символьных сегментов), используйте GetEncoderGetDecoder и свойства соответственно.
Конструкторы
| Имя | Описание |
|---|---|
| UnicodeEncoding() |
Инициализирует новый экземпляр класса UnicodeEncoding. |
| UnicodeEncoding(Boolean, Boolean, Boolean) |
Инициализирует новый экземпляр класса UnicodeEncoding. Параметры указывают, следует ли использовать порядок байтов больших байтов, указывать ли метку порядка байтов Юникода и вызывать ли исключение при обнаружении недопустимой кодировки. |
| UnicodeEncoding(Boolean, Boolean) |
Инициализирует новый экземпляр класса UnicodeEncoding. Параметры указывают, следует ли использовать порядок байтов больших байтов и возвращает ли GetPreamble() метод знак порядка байтов Юникода. |
Поля
| Имя | Описание |
|---|---|
| CharSize |
Представляет размер символа Юникода в байтах. Это поле является константой. |
Свойства
| Имя | Описание |
|---|---|
| BodyName |
При переопределении в производном классе получает имя текущей кодировки, которую можно использовать с тегами текста агента почты. (Унаследовано от Encoding) |
| CodePage |
При переопределении в производном классе получает идентификатор кодовой страницы текущего Encoding. (Унаследовано от Encoding) |
| DecoderFallback |
Возвращает или задает DecoderFallback объект для текущего Encoding объекта. (Унаследовано от Encoding) |
| EncoderFallback |
Возвращает или задает EncoderFallback объект для текущего Encoding объекта. (Унаследовано от Encoding) |
| EncodingName |
При переопределении в производном классе получает удобочитаемое пользователем описание текущей кодировки. (Унаследовано от Encoding) |
| HeaderName |
При переопределении в производном классе получает имя текущей кодировки, которую можно использовать с тегами заголовков агента почты. (Унаследовано от Encoding) |
| IsBrowserDisplay |
При переопределении в производном классе получает значение, указывающее, может ли текущая кодировка использоваться клиентами браузера для отображения содержимого. (Унаследовано от Encoding) |
| IsBrowserSave |
При переопределении в производном классе получает значение, указывающее, может ли текущая кодировка использоваться клиентами браузера для сохранения содержимого. (Унаследовано от Encoding) |
| IsMailNewsDisplay |
При переопределении в производном классе получает значение, указывающее, может ли текущая кодировка использоваться почтовыми клиентами и клиентами новостей для отображения содержимого. (Унаследовано от Encoding) |
| IsMailNewsSave |
При переопределении в производном классе получает значение, указывающее, может ли текущая кодировка использоваться почтовыми клиентами и клиентами новостей для сохранения содержимого. (Унаследовано от Encoding) |
| IsReadOnly |
При переопределении в производном классе получает значение, указывающее, доступна ли текущая кодировка только для чтения. (Унаследовано от Encoding) |
| IsSingleByte |
При переопределении в производном классе получает значение, указывающее, использует ли текущая кодировка точки кода с одним байтом. (Унаследовано от Encoding) |
| Preamble |
Возвращает метку порядка байтов Юникода, закодированную в формате UTF-16, если этот объект настроен для предоставления одного. |
| Preamble |
При переопределении в производном классе возвращает диапазон, содержащий последовательность байтов, указывающую используемую кодировку. (Унаследовано от Encoding) |
| WebName |
При переопределении в производном классе получает имя, зарегистрированное в Центр назначения номеров Интернета (IANA) для текущей кодировки. (Унаследовано от Encoding) |
| WindowsCodePage |
При переопределении в производном классе получает кодовую страницу операционной системы Windows, которая наиболее тесно соответствует текущей кодировке. (Унаследовано от Encoding) |
Методы
| Имя | Описание |
|---|---|
| Clone() |
При переопределении в производном классе создает неглубокую копию текущего Encoding объекта. (Унаследовано от Encoding) |
| Equals(Object) |
Определяет, равен ли указанный Object объект текущему UnicodeEncoding объекту. |
| GetByteCount(Char[], Int32, Int32) |
Вычисляет количество байтов, созданных путем кодирования набора символов из указанного массива символов. |
| GetByteCount(Char[]) |
При переопределении в производном классе вычисляет количество байтов, созданных путем кодирования всех символов в указанном массиве символов. (Унаследовано от Encoding) |
| GetByteCount(Char*, Int32) |
Вычисляет количество байтов, созданных путем кодирования набора символов, начиная с указанного указателя символов. |
| GetByteCount(Char*, Int32) |
При переопределении в производном классе вычисляет количество байтов, созданных путем кодирования набора символов, начиная с указанного указателя символов. (Унаследовано от Encoding) |
| GetByteCount(ReadOnlySpan<Char>) |
При переопределении в производном классе вычисляет количество байтов, созданных путем кодирования символов в указанном диапазоне символов. (Унаследовано от Encoding) |
| GetByteCount(String, Int32, Int32) |
При переопределении в производном классе вычисляет количество байтов, созданных путем кодирования набора символов из указанной строки. (Унаследовано от Encoding) |
| GetByteCount(String) |
Вычисляет количество байтов, созданных путем кодирования символов в указанной строке. |
| GetBytes(Char[], Int32, Int32, Byte[], Int32) |
Кодирует набор символов из указанного массива символов в указанный массив байтов. |
| GetBytes(Char[], Int32, Int32) |
При переопределении в производном классе кодирует набор символов из указанного массива символов в последовательность байтов. (Унаследовано от Encoding) |
| GetBytes(Char[]) |
При переопределении в производном классе кодирует все символы в указанном массиве символов в последовательность байтов. (Унаследовано от Encoding) |
| GetBytes(Char*, Int32, Byte*, Int32) |
Кодирует набор символов, начиная с указанного указателя символов, в последовательность байтов, хранящихся начиная с указанного указателя байтов. |
| GetBytes(Char*, Int32, Byte*, Int32) |
При переопределении в производном классе кодирует набор символов, начиная с указанного указателя символов, в последовательность байтов, которые хранятся начиная с указанного указателя байтов. (Унаследовано от Encoding) |
| GetBytes(ReadOnlySpan<Char>, Span<Byte>) |
При переопределении в производном классе кодируется в диапазон байтов набор символов из указанного диапазона только для чтения. (Унаследовано от Encoding) |
| GetBytes(String, Int32, Int32, Byte[], Int32) |
Кодирует набор символов из указанного в указанный String массив байтов. |
| GetBytes(String, Int32, Int32) |
При переопределении в производном классе кодируется в массив байтов число символов, указанных |
| GetBytes(String) |
Кодирует набор символов из указанной строки в указанный массив байтов. |
| GetBytes(String) |
При переопределении в производном классе кодирует все символы в указанной строке в последовательность байтов. (Унаследовано от Encoding) |
| GetCharCount(Byte[], Int32, Int32) |
Вычисляет количество символов, созданных путем декодирования последовательности байтов из указанного массива байтов. |
| GetCharCount(Byte[]) |
При переопределении в производном классе вычисляет количество символов, созданных путем декодирования всех байтов в указанном массиве байтов. (Унаследовано от Encoding) |
| GetCharCount(Byte*, Int32) |
Вычисляет количество символов, созданных путем декодирования последовательности байтов, начиная с указанного указателя байтов. |
| GetCharCount(Byte*, Int32) |
При переопределении в производном классе вычисляет количество символов, созданных путем декодирования последовательности байтов, начиная с указанного указателя байтов. (Унаследовано от Encoding) |
| GetCharCount(ReadOnlySpan<Byte>) |
При переопределении в производном классе вычисляет количество символов, созданных путем декодирования предоставленного диапазона байтов только для чтения. (Унаследовано от Encoding) |
| GetChars(Byte[], Int32, Int32, Char[], Int32) |
Декодирует последовательность байтов из указанного массива байтов в указанный массив символов. |
| GetChars(Byte[], Int32, Int32) |
При переопределении в производном классе декодирует последовательность байтов из указанного массива байтов в набор символов. (Унаследовано от Encoding) |
| GetChars(Byte[]) |
При переопределении в производном классе декодирует все байты в указанном массиве байтов в набор символов. (Унаследовано от Encoding) |
| GetChars(Byte*, Int32, Char*, Int32) |
Декодирует последовательность байтов, начиная с указанного указателя байтов, в набор символов, хранящихся начиная с указанного указателя символов. |
| GetChars(Byte*, Int32, Char*, Int32) |
При переопределении в производном классе декодирует последовательность байтов, начиная с указанного указателя байтов, в набор символов, которые хранятся начиная с указанного указателя символов. (Унаследовано от Encoding) |
| GetChars(ReadOnlySpan<Byte>, Span<Char>) |
При переопределении в производном классе декодирует все байты в указанном диапазоне байтов только для чтения в диапазон символов. (Унаследовано от Encoding) |
| GetDecoder() |
Получает декодатор, который преобразует последовательность байтов в кодировке UTF-16 в последовательность символов Юникода. |
| GetEncoder() |
Получает кодировщик, который преобразует последовательность символов Юникода в последовательность байтов в кодировке UTF-16. |
| GetEncoder() |
При переопределении в производном классе получает кодировщик, который преобразует последовательность символов Юникода в закодированную последовательность байтов. (Унаследовано от Encoding) |
| GetHashCode() |
Возвращает хэш-код для текущего экземпляра. |
| GetMaxByteCount(Int32) |
Вычисляет максимальное количество байтов, созданных путем кодирования указанного числа символов. |
| GetMaxCharCount(Int32) |
Вычисляет максимальное количество символов, созданных путем декодирования указанного числа байтов. |
| GetPreamble() |
Возвращает метку порядка байтов Юникода, закодированную в формате UTF-16, если конструктор для этого экземпляра запрашивает метку порядка байтов. |
| GetString(Byte[], Int32, Int32) |
Декодирует диапазон байтов из массива байтов в строку. |
| GetString(Byte[], Int32, Int32) |
При переопределении в производном классе декодирует последовательность байтов из указанного массива байтов в строку. (Унаследовано от Encoding) |
| GetString(Byte[]) |
При переопределении в производном классе декодирует все байты в указанном массиве байтов в строку. (Унаследовано от Encoding) |
| GetString(Byte*, Int32) |
При переопределении в производном классе декодирует указанное число байтов, начиная с указанного адреса в строку. (Унаследовано от Encoding) |
| GetString(ReadOnlySpan<Byte>) |
При переопределении в производном классе декодирует все байты в указанном диапазоне байтов в строку. (Унаследовано от Encoding) |
| GetType() |
Возвращает Type текущего экземпляра. (Унаследовано от Object) |
| IsAlwaysNormalized() |
Возвращает значение, указывающее, всегда ли текущая кодировка нормализована, используя форму нормализации по умолчанию. (Унаследовано от Encoding) |
| IsAlwaysNormalized(NormalizationForm) |
При переопределении в производном классе получает значение, указывающее, всегда ли текущая кодировка нормализована, используя указанную форму нормализации. (Унаследовано от Encoding) |
| MemberwiseClone() |
Создает неглубокую копию текущей Object. (Унаследовано от Object) |
| ToString() |
Возвращает строку, представляющую текущий объект. (Унаследовано от Object) |
| TryGetBytes(ReadOnlySpan<Char>, Span<Byte>, Int32) |
Кодирует в диапазон байтов набор символов из указанного диапазона только для чтения, если целевой объект достаточно велик. (Унаследовано от Encoding) |
| TryGetChars(ReadOnlySpan<Byte>, Span<Char>, Int32) |
Декодирует в диапазон символов набор байтов из указанного диапазона только для чтения, если целевой объект достаточно велик. (Унаследовано от Encoding) |