Encoder Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Преобразует набор символов в последовательность байтов.
public ref class Encoder abstract
public abstract class Encoder
[System.Serializable]
public abstract class Encoder
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public abstract class Encoder
type Encoder = class
[<System.Serializable>]
type Encoder = class
[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type Encoder = class
Public MustInherit Class Encoder
- Наследование
-
Encoder
- Атрибуты
Примеры
В следующем примере показано, как преобразовать массив символов Юникода в блоки байтов с помощью указанной кодировки. Для сравнения массив символов сначала закодирован с помощью UTF7Encoding. Затем массив символов закодирован с помощью .Encoder
using System;
using System.Text;
class EncoderTest {
public static void Main() {
// The characters to encode.
Char[] chars = new Char[] {
'\u0023', // #
'\u0025', // %
'\u03a0', // Pi
'\u03a3' // Sigma
};
// Encode characters using an Encoding object.
Encoding encoding = Encoding.UTF7;
Console.WriteLine("Using Encoding\n--------------");
// Encode complete array for comparison.
Byte[] allCharactersFromEncoding = encoding.GetBytes(chars);
Console.WriteLine("All characters encoded:");
ShowArray(allCharactersFromEncoding);
// Encode characters, one-by-one.
// The Encoding object will NOT maintain state between calls.
Byte[] firstchar = encoding.GetBytes(chars, 0, 1);
Console.WriteLine("First character:");
ShowArray(firstchar);
Byte[] secondchar = encoding.GetBytes(chars, 1, 1);
Console.WriteLine("Second character:");
ShowArray(secondchar);
Byte[] thirdchar = encoding.GetBytes(chars, 2, 1);
Console.WriteLine("Third character:");
ShowArray(thirdchar);
Byte[] fourthchar = encoding.GetBytes(chars, 3, 1);
Console.WriteLine("Fourth character:");
ShowArray(fourthchar);
// Now, encode characters using an Encoder object.
Encoder encoder = encoding.GetEncoder();
Console.WriteLine("Using Encoder\n-------------");
// Encode complete array for comparison.
Byte[] allCharactersFromEncoder = new Byte[encoder.GetByteCount(chars, 0, chars.Length, true)];
encoder.GetBytes(chars, 0, chars.Length, allCharactersFromEncoder, 0, true);
Console.WriteLine("All characters encoded:");
ShowArray(allCharactersFromEncoder);
// Do not flush state; i.e. maintain state between calls.
bool bFlushState = false;
// Encode characters one-by-one.
// By maintaining state, the Encoder will not store extra bytes in the output.
Byte[] firstcharNoFlush = new Byte[encoder.GetByteCount(chars, 0, 1, bFlushState)];
encoder.GetBytes(chars, 0, 1, firstcharNoFlush, 0, bFlushState);
Console.WriteLine("First character:");
ShowArray(firstcharNoFlush);
Byte[] secondcharNoFlush = new Byte[encoder.GetByteCount(chars, 1, 1, bFlushState)];
encoder.GetBytes(chars, 1, 1, secondcharNoFlush, 0, bFlushState);
Console.WriteLine("Second character:");
ShowArray(secondcharNoFlush);
Byte[] thirdcharNoFlush = new Byte[encoder.GetByteCount(chars, 2, 1, bFlushState)];
encoder.GetBytes(chars, 2, 1, thirdcharNoFlush, 0, bFlushState);
Console.WriteLine("Third character:");
ShowArray(thirdcharNoFlush);
// Must flush state on last call to GetBytes().
bFlushState = true;
Byte[] fourthcharNoFlush = new Byte[encoder.GetByteCount(chars, 3, 1, bFlushState)];
encoder.GetBytes(chars, 3, 1, fourthcharNoFlush, 0, bFlushState);
Console.WriteLine("Fourth character:");
ShowArray(fourthcharNoFlush);
}
public static void ShowArray(Array theArray) {
foreach (Object o in theArray) {
Console.Write("[{0}]", o);
}
Console.WriteLine("\n");
}
}
/* This code example produces the following output.
Using Encoding
--------------
All characters encoded:
[43][65][67][77][65][74][81][79][103][65][54][77][45]
First character:
[43][65][67][77][45]
Second character:
[43][65][67][85][45]
Third character:
[43][65][54][65][45]
Fourth character:
[43][65][54][77][45]
Using Encoder
-------------
All characters encoded:
[43][65][67][77][65][74][81][79][103][65][54][77][45]
First character:
[43][65][67]
Second character:
[77][65][74]
Third character:
[81][79][103]
Fourth character:
[65][54][77][45]
*/
Imports System.Text
Imports Microsoft.VisualBasic.Strings
Class EncoderTest
Public Shared Sub Main()
' Unicode characters.
' ChrW(35) = #
' ChrW(37) = %
' ChrW(928) = Pi
' ChrW(931) = Sigma
Dim chars() As Char = {ChrW(35), ChrW(37), ChrW(928), ChrW(931)}
' Encode characters using an Encoding object.
Dim encoding As Encoding = Encoding.UTF7
Console.WriteLine( _
"Using Encoding" & _
ControlChars.NewLine & _
"--------------" _
)
' Encode complete array for comparison.
Dim allCharactersFromEncoding As Byte() = encoding.GetBytes(chars)
Console.WriteLine("All characters encoded:")
ShowArray(allCharactersFromEncoding)
' Encode characters, one-by-one.
' The Encoding object will NOT maintain state between calls.
Dim firstchar As Byte() = encoding.GetBytes(chars, 0, 1)
Console.WriteLine("First character:")
ShowArray(firstchar)
Dim secondchar As Byte() = encoding.GetBytes(chars, 1, 1)
Console.WriteLine("Second character:")
ShowArray(secondchar)
Dim thirdchar As Byte() = encoding.GetBytes(chars, 2, 1)
Console.WriteLine("Third character:")
ShowArray(thirdchar)
Dim fourthchar As Byte() = encoding.GetBytes(chars, 3, 1)
Console.WriteLine("Fourth character:")
ShowArray(fourthchar)
' Now, encode characters using an Encoder object.
Dim encoder As Encoder = encoding.GetEncoder()
Console.WriteLine( _
"Using Encoder" & _
ControlChars.NewLine & _
"-------------" _
)
' Encode complete array for comparison.
Dim allCharactersFromEncoder( _
encoder.GetByteCount(chars, 0, chars.Length, True) _
) As Byte
encoder.GetBytes(chars, 0, chars.Length, allCharactersFromEncoder, 0, True)
Console.WriteLine("All characters encoded:")
ShowArray(allCharactersFromEncoder)
' Do not flush state; i.e. maintain state between calls.
Dim bFlushState As Boolean = False
' Encode characters one-by-one.
' By maintaining state, the Encoder will not store extra bytes in the output.
Dim firstcharNoFlush( _
encoder.GetByteCount(chars, 0, 1, bFlushState) _
) As Byte
encoder.GetBytes(chars, 0, 1, firstcharNoFlush, 0, bFlushState)
Console.WriteLine("First character:")
ShowArray(firstcharNoFlush)
Dim secondcharNoFlush( _
encoder.GetByteCount(chars, 1, 1, bFlushState) _
) As Byte
encoder.GetBytes(chars, 1, 1, secondcharNoFlush, 0, bFlushState)
Console.WriteLine("Second character:")
ShowArray(secondcharNoFlush)
Dim thirdcharNoFlush( _
encoder.GetByteCount(chars, 2, 1, bFlushState) _
) As Byte
encoder.GetBytes(chars, 2, 1, thirdcharNoFlush, 0, bFlushState)
Console.WriteLine("Third character:")
ShowArray(thirdcharNoFlush)
' Must flush state on last call to GetBytes().
bFlushState = True
Dim fourthcharNoFlush( _
encoder.GetByteCount(chars, 3, 1, bFlushState) _
) As Byte
encoder.GetBytes(chars, 3, 1, fourthcharNoFlush, 0, bFlushState)
Console.WriteLine("Fourth character:")
ShowArray(fourthcharNoFlush)
End Sub
Public Shared Sub ShowArray(theArray As Array)
Dim o As Object
For Each o In theArray
Console.Write("[{0}]", o)
Next o
Console.WriteLine(ControlChars.NewLine)
End Sub
End Class
'This code example produces the following output.
'
'Using Encoding
'--------------
'All characters encoded:
'[43][65][67][77][65][74][81][79][103][65][54][77][45]
'
'First character:
'[43][65][67][77][45]
'
'Second character:
'[43][65][67][85][45]
'
'Third character:
'[43][65][54][65][45]
'
'Fourth character:
'[43][65][54][77][45]
'
'Using Encoder
'-------------
'All characters encoded:
'[43][65][67][77][65][74][81][79][103][65][54][77][45][0]
'
'First character:
'[43][65][67][0]
'
'Second character:
'[77][65][74][0]
'
'Third character:
'[81][79][103][0]
'
'Fourth character:
'[65][54][77][45][0]
'
Комментарии
Чтобы получить экземпляр реализации Encoder класса, приложение должно использовать GetEncoder метод Encoding реализации.
Метод GetByteCount определяет, сколько байтов приводит к кодированию набора символов Юникода, а GetBytes метод выполняет фактическую кодировку. В классе доступно Encoder несколько версий обоих этих методов. Дополнительные сведения см. в разделе Encoding.GetBytes.
Encoder Объект сохраняет сведения о состоянии между последовательными вызовами GetBytes или Convert методами, чтобы он смог правильно кодировать последовательности символов, охватывающие блоки. Он Encoder также сохраняет конечные символы в конце блоков данных и использует конечные символы в следующей операции кодирования. Например, блок данных может завершиться несоответствующим высоким суррогатом, и соответствующий низкий суррогат может находиться в следующем блоке данных. Таким образом, GetDecoder и GetEncoder они полезны для сетевых операций передачи и файлов, так как эти операции часто имеют дело с блоками данных вместо полного потока данных.
Note
Когда приложение выполняется с потоком данных, он должен убедиться, что сведения о состоянии очищаются, задав flush параметр в true соответствующем вызове метода. Если возникает исключение или если приложение переключает потоки, он должен вызвать Reset очистку внутреннего состояния Encoder объекта.
Примечания для тех, кто реализует этот метод
Когда приложение наследует от этого класса, оно должно переопределить все члены.
Конструкторы
| Имя | Описание |
|---|---|
| Encoder() |
Инициализирует новый экземпляр класса Encoder. |
Свойства
| Имя | Описание |
|---|---|
| Fallback |
Возвращает или задает EncoderFallback объект для текущего Encoder объекта. |
| FallbackBuffer |
Возвращает объект, связанный EncoderFallbackBuffer с текущим Encoder объектом. |
Методы
| Имя | Описание |
|---|---|
| Convert(Char[], Int32, Int32, Byte[], Int32, Int32, Boolean, Int32, Int32, Boolean) |
Преобразует массив символов Юникода в кодированную последовательность байтов и сохраняет результат в массиве байтов. |
| Convert(Char*, Int32, Byte*, Int32, Boolean, Int32, Int32, Boolean) |
Преобразует буфер символов Юникода в закодированную последовательность байтов и сохраняет результат в другом буфере. |
| Convert(ReadOnlySpan<Char>, Span<Byte>, Boolean, Int32, Int32, Boolean) |
Преобразует диапазон символов Юникода в закодированную последовательность байтов и сохраняет результат в другом буфере. |
| Equals(Object) |
Определяет, равен ли указанный объект текущему объекту. (Унаследовано от Object) |
| GetByteCount(Char[], Int32, Int32, Boolean) |
При переопределении в производном классе вычисляет количество байтов, созданных путем кодирования набора символов из указанного массива символов. Параметр указывает, следует ли очистить внутреннее состояние кодировщика после вычисления. |
| GetByteCount(Char*, Int32, Boolean) |
При переопределении в производном классе вычисляет количество байтов, созданных путем кодирования набора символов, начиная с указанного указателя символов. Параметр указывает, следует ли очистить внутреннее состояние кодировщика после вычисления. |
| GetByteCount(ReadOnlySpan<Char>, Boolean) |
При переопределении в производном классе вычисляет количество байтов, созданных путем кодирования набора символов в диапазоне chars. Параметр указывает, следует ли очистить внутреннее состояние кодировщика после вычисления. |
| GetBytes(Char[], Int32, Int32, Byte[], Int32, Boolean) |
При переопределении в производном классе кодирует набор символов из указанного массива символов и любые символы во внутреннем буфере в указанный массив байтов. Параметр указывает, следует ли очистить внутреннее состояние кодировщика после преобразования. |
| GetBytes(Char*, Int32, Byte*, Int32, Boolean) |
При переопределении в производном классе кодирует набор символов, начиная с указанного указателя символов, и все символы во внутреннем буфере в последовательность байтов, которые хранятся начиная с указанного указателя байтов. Параметр указывает, следует ли очистить внутреннее состояние кодировщика после преобразования. |
| GetBytes(ReadOnlySpan<Char>, Span<Byte>, Boolean) |
При переопределении в производном классе кодирует набор символов в диапазоне входных символов и все символы во внутреннем буфере в последовательность байтов, хранящихся в диапазоне входных байтов. Параметр указывает, следует ли очистить внутреннее состояние кодировщика после преобразования. |
| GetHashCode() |
Служит хэш-функцией по умолчанию. (Унаследовано от Object) |
| GetType() |
Возвращает Type текущего экземпляра. (Унаследовано от Object) |
| MemberwiseClone() |
Создает неглубокую копию текущей Object. (Унаследовано от Object) |
| Reset() |
При переопределении в производном классе задает кодировщик обратно в исходное состояние. |
| ToString() |
Возвращает строку, представляющую текущий объект. (Унаследовано от Object) |
Методы расширения
| Имя | Описание |
|---|---|
| Convert(Encoder, ReadOnlySequence<Char>, IBufferWriter<Byte>, Boolean, Int64, Boolean) |
ReadOnlySequence<T> Преобразует в кодированные байты и записывает результат |
| Convert(Encoder, ReadOnlySpan<Char>, IBufferWriter<Byte>, Boolean, Int64, Boolean) |
Преобразует значение ReadOnlySpan<T> в байты с помощью |