Encoder Класс

Определение

Конвертирует набор символов в последовательность байтов.

public abstract class Encoder
[System.Serializable]
public abstract class Encoder
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public abstract 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]


*/

Комментарии

Чтобы получить экземпляр реализации Encoder класса , приложение должно использовать GetEncoder метод Encoding реализации .

GetByteCountМетод определяет, сколько байт приводит к кодированию набора символов Юникода, и GetBytes метод выполняет фактическую кодировку. Существует несколько версий обоих этих методов, доступных Encoder в классе . Для получения дополнительной информации см. Encoding.GetBytes.

Объект Encoder сохраняет сведения о состоянии между последовательными вызовами GetBytes методов или Convert , чтобы можно было правильно кодировать последовательности символов, охватывающие блоки. EncoderТакже сохраняет замыкающие символы в конце блоков данных и использует замыкающие символы в следующей операции кодирования. Например, блок данных может заканчиваться непарным старшим символом-заместителем, а соответствующий младший символ-заместитель может находиться в следующем блоке данных. Поэтому GetDecoder они и GetEncoder полезны для передачи по сети и операций с файлами, так как эти операции часто работают с блоками данных, а не с полным потоком данных.

Примечание

После завершения работы приложения с потоком данных необходимо убедиться, что сведения о состоянии сбрасываются, задав flush для параметра значение true в соответствующем вызове метода. Если возникает исключение или приложение переключает потоки, оно должно вызвать Reset для очистки Encoder внутреннего состояния объекта.

Примечания для тех, кто реализует этот метод

Когда приложение наследует от этого класса, оно должно переопределить все члены.

Конструкторы

Encoder()

Инициализирует новый экземпляр класса Encoder.

Свойства

Fallback

Получает или задает объект EncoderFallback для текущего объекта Encoder.

FallbackBuffer

Получает объект EncoderFallbackBuffer, связанный с текущим объектом Encoder.

Методы

Convert(Char*, Int32, Byte*, Int32, Boolean, Int32, Int32, Boolean)

Преобразует буфер символов Юникода в закодированную последовательность байтов и сохраняет результат в другом буфере.

Convert(Char[], Int32, Int32, Byte[], Int32, Int32, Boolean, Int32, Int32, Boolean)

Преобразует массив символов Юникода в закодированную последовательность байтов и сохраняет результат в массиве байтов.

Convert(ReadOnlySpan<Char>, Span<Byte>, Boolean, Int32, Int32, Boolean)

Преобразует диапазон символов Юникода в закодированную последовательность байтов и сохраняет результат в другом буфере.

Equals(Object)

Определяет, равен ли указанный объект текущему объекту.

(Унаследовано от Object)
GetByteCount(Char*, Int32, Boolean)

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

GetByteCount(Char[], Int32, Int32, Boolean)

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

GetByteCount(ReadOnlySpan<Char>, Boolean)

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

GetBytes(Char*, Int32, Byte*, Int32, Boolean)

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

GetBytes(Char[], Int32, 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> в закодированные байты и записывает результат в writer.

Convert(Encoder, ReadOnlySpan<Char>, IBufferWriter<Byte>, Boolean, Int64, Boolean)

Преобразует ReadOnlySpan<T> в байты с помощью encoder и записывает результат в writer.

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

Продукт Версии
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0

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