Поделиться через


Базовые типы кодировки

Обновлен: Ноябрь 2007

Знаки — это абстрактные сущности, которые представляются с помощью множества различных схем знаков или кодовых страниц. Например, в кодировке Юникод UTF-16 знаки представляются в виде последовательности 16-битовых целых чисел, в то время как в кодировке Юникод UTF-8 те же самые знаки описываются в виде последовательности 8-битовых байт. Среда CLR использует для представления знаков кодировку Юникод UTF-16 (Unicode Transformation Format, 16-битовая кодировка).

Для отображения представления знаков из внутренней схемы знаков во внешние схемы приложения, ориентированные на среду CLR, используется кодирование. Для обратного преобразования знаков из внешних схем во внутренние схемы приложения используется декодирование. В следующей таблице перечислены классы из пространства имен System.Text, наиболее часто используемые для кодирования и декодирования знаков.

Схема знаков

Класс

Объяснение

Кодировка ASCII

System.Text.ASCIIEncoding

Преобразование в знаки ASCII и обратное преобразование.

Многоформатная кодировка

System.Text.Encoding

Преобразование знаков в различные форматы кодировки и обратное преобразование в порядке, определяемом методом Convert.

Кодировка Юникод UTF-16

System.Text.UnicodeEncoding

Преобразование в формат UTF-16 и обратное преобразование. В этой схеме знаки представляются 16-битовыми целыми числами.

Кодировка Юникод UTF-8

System.Text.UTF8Encoding

Преобразование в формат UTF-8 и обратное преобразование. В этой схеме с переменной длиной представления знаки представляются с использованием от одного до четырех байт.

В следующем примере кода строка в формате Юникод преобразуется в байтовый массив с помощью метода ASCIIEncoding.GetBytes. Каждый байт массива представляет значение ASCII, соответствующее букве, находящейся в данном месте строки.

Dim MyString As String = "Encoding String."
Dim AE As New ASCIIEncoding()
Dim ByteArray As Byte() = AE.GetBytes(MyString)
Dim x as Integer
For x = 0 To ByteArray.Length - 1
   Console.Write("{0} ", ByteArray(x))
Next
string MyString = "Encoding String.";
ASCIIEncoding AE = new ASCIIEncoding();
byte[] ByteArray = AE.GetBytes(MyString);
for(int x = 0;x <= ByteArray.Length - 1; x++)
{
   Console.Write("{0} ", ByteArray[x]);
}

Ниже показан консольный вывод этого примера. Байт 69 — это значение ASCII для знака E; байт 110 — это значение ASCII для знака n и т. д.

69 110 99 111 100 105 110 103 32 83 116 114 105 110 103 46

В следующем примере кода происходит преобразование полученного выше байтового массива в массив знаков с помощью класса ASCIIEncoding. Для декодирования байтового массива используется метод GetChars.

Dim AE As New ASCIIEncoding()
Dim ByteArray As Byte() = { 69, 110, 99, 111, 100, 105, 110, 103, 32, 83, 116, 114, 105, 110, 103, 46 }
Dim CharArray As Char() = AE.GetChars(ByteArray)
Dim x As Integer
For x = 0 To CharArray.Length - 1
   Console.Write(CharArray(x))
Next
ASCIIEncoding AE = new ASCIIEncoding();
byte[] ByteArray = { 69, 110, 99, 111, 100, 105, 110, 103, 32, 83, 116, 114, 105, 110, 103, 46 };
char[] CharArray = AE.GetChars(ByteArray);
for(int x = 0;x <= CharArray.Length - 1; x++)
{
   Console.Write(CharArray[x]);
}

Приведенный выше код выводит на консоль текст Encoding String.

См. также

Ссылки

System.Text

System.Text.ASCIIEncoding

System.Text.Encoding

System.Text.UnicodeEncoding

System.Text.UTF7Encoding

System.Text.UTF8Encoding

Другие ресурсы

Работа с базовыми типами