Encoder Třída

Definice

Převede sadu znaků na posloupnost bajtů.

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
Dědičnost
Encoder
Atributy

Příklady

Následující příklad ukazuje, jak převést pole znaků Unicode na bloky bajtů pomocí zadaného kódování. Pro porovnání je pole znaků nejprve kódováno pomocí UTF7Encoding. Dále je pole znaků kódováno pomocí znaku 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]
'

Poznámky

K získání instance implementace Encoder třídy by aplikace měla použít GetEncoder metodu Encoding implementace.

Metoda GetByteCount určuje, kolik bajtů má za následek kódování sady znaků Unicode a GetBytes metoda provádí skutečné kódování. Ve třídě je k dispozici Encoder několik verzí obou těchto metod. Další informace najdete na webu Encoding.GetBytes.

Objekt Encoder udržuje informace o stavu mezi následnými voláními GetBytes nebo Convert metodami, aby mohl správně zakódovat sekvence znaků, které pokrývají bloky. Na konci datových bloků se Encoder zachovají také koncové znaky a v další operaci kódování se používají koncové znaky. Například datový blok může končit nedostupnou vysokou náhradou a odpovídající nízká náhrada může být v dalším bloku dat. GetDecoder Proto jsou GetEncoder užitečné pro síťové přenosy a operace se soubory, protože tyto operace často zpracovávají bloky dat místo kompletního datového proudu.

Note

Po dokončení aplikace s datovým proudem by se mělo ujistit, že informace o stavu jsou vyprázdněné nastavením flush parametru do true příslušného volání metody. Pokud dojde k výjimce nebo pokud aplikace přepne datové proudy, měla by volat Reset vymazání vnitřního stavu objektu Encoder .

Poznámky pro implementátory

Když vaše aplikace dědí z této třídy, musí přepsat všechny členy.

Konstruktory

Name Description
Encoder()

Inicializuje novou instanci Encoder třídy.

Vlastnosti

Name Description
Fallback

Získá nebo nastaví EncoderFallback objekt pro aktuální Encoder objekt.

FallbackBuffer

EncoderFallbackBuffer Získá objekt přidružený k aktuálnímu Encoder objektu.

Metody

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

Převede pole znaků Unicode na zakódovanou posloupnost bajtů a uloží výsledek do pole bajtů.

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

Převede vyrovnávací paměť znaků Unicode na zakódovanou posloupnost bajtů a uloží výsledek do jiné vyrovnávací paměti.

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

Převede rozsah znaků Unicode na zakódovanou bajtovou sekvenci a uloží výsledek do jiné vyrovnávací paměti.

Equals(Object)

Určí, zda se zadaný objekt rovná aktuálnímu objektu.

(Zděděno od Object)
GetByteCount(Char[], Int32, Int32, Boolean)

Při přepsání v odvozené třídě vypočítá počet bajtů vytvořených kódováním sady znaků ze zadaného pole znaků. Parametr určuje, jestli se má po výpočtu vymazat vnitřní stav kodéru.

GetByteCount(Char*, Int32, Boolean)

Při přepsání v odvozené třídě vypočítá počet bajtů vytvořených kódováním sady znaků počínaje zadaným ukazatelem znaku. Parametr určuje, jestli se má po výpočtu vymazat vnitřní stav kodéru.

GetByteCount(ReadOnlySpan<Char>, Boolean)

Při přepsání v odvozené třídě vypočítá počet bajtů vytvořených kódováním sady znaků v rozsahu "chars". Parametr určuje, jestli se má po výpočtu vymazat vnitřní stav kodéru.

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

Při přepsání v odvozené třídě zakóduje sadu znaků ze zadaného pole znaků a všechny znaky v interní vyrovnávací paměti do zadané bajtové pole. Parametr určuje, jestli se má po převodu vymazat vnitřní stav kodéru.

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

Při přepsání v odvozené třídě kóduje sadu znaků začínající zadaným znakovým ukazatelem a všechny znaky v interní vyrovnávací paměti do posloupnosti bajtů, které jsou uloženy počínaje zadaným bajtovým ukazatelem. Parametr určuje, jestli se má po převodu vymazat vnitřní stav kodéru.

GetBytes(ReadOnlySpan<Char>, Span<Byte>, Boolean)

Při přepsání v odvozené třídě zakóduje sadu znaků ve vstupních znacích rozsah a všechny znaky v interní vyrovnávací paměti do posloupnosti bajtů, které jsou uloženy ve vstupním bajtovém rozsahu. Parametr určuje, jestli se má po převodu vymazat vnitřní stav kodéru.

GetHashCode()

Slouží jako výchozí funkce hash.

(Zděděno od Object)
GetType()

Získá Type aktuální instance.

(Zděděno od Object)
MemberwiseClone()

Vytvoří mělkou kopii aktuálního Object.

(Zděděno od Object)
Reset()

Při přepsání v odvozené třídě nastaví kodér zpět do počátečního stavu.

ToString()

Vrátí řetězec, který představuje aktuální objekt.

(Zděděno od Object)

Platí pro

Viz také