Encoder Clase
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Convierte un conjunto de caracteres en una secuencia de bytes.
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
- Herencia
-
Encoder
- Atributos
Ejemplos
En el ejemplo siguiente se muestra cómo convertir una matriz de caracteres Unicode en bloques de bytes mediante una codificación especificada. Para la comparación, la matriz de caracteres se codifica primero mediante UTF7Encoding. A continuación, la matriz de caracteres se codifica mediante .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]
'
Comentarios
Para obtener una instancia de una implementación de la Encoder clase , la aplicación debe usar el GetEncoder método de una Encoding implementación.
El GetByteCount método determina cuántos bytes dan como resultado la codificación de un conjunto de caracteres Unicode y el GetBytes método realiza la codificación real. Hay varias versiones de estos métodos disponibles en la Encoder clase . Para obtener más información, consulte Encoding.GetBytes.
Un Encoder objeto mantiene información de estado entre llamadas sucesivas a GetBytes métodos o Convert para que pueda codificar correctamente secuencias de caracteres que abarcan bloques.
Encoder También conserva los caracteres finales al final de los bloques de datos y usa los caracteres finales en la siguiente operación de codificación. Por ejemplo, un bloque de datos podría terminar con un suplente alto no coincidente y el suplente bajo coincidente podría estar en el siguiente bloque de datos. Por lo tanto, GetDecoder y GetEncoder son útiles para las operaciones de transmisión de red y archivos, ya que esas operaciones suelen tratar con bloques de datos en lugar de un flujo de datos completo.
Note
Cuando la aplicación se realiza con un flujo de datos, debe asegurarse de que la información de estado se vacía estableciendo el flush parámetro true en en la llamada al método adecuado. Si se produce una excepción o si la aplicación cambia de flujo, debe llamar Reset a para borrar el estado interno del Encoder objeto.
Notas a los implementadores
Cuando la aplicación hereda de esta clase, debe invalidar todos los miembros.
Constructores
| Nombre | Description |
|---|---|
| Encoder() |
Inicializa una nueva instancia de la clase Encoder. |
Propiedades
| Nombre | Description |
|---|---|
| Fallback |
Obtiene o establece un EncoderFallback objeto para el objeto actual Encoder . |
| FallbackBuffer |
Obtiene el EncoderFallbackBuffer objeto asociado al objeto actual Encoder . |
Métodos
| Nombre | Description |
|---|---|
| Convert(Char[], Int32, Int32, Byte[], Int32, Int32, Boolean, Int32, Int32, Boolean) |
Convierte una matriz de caracteres Unicode en una secuencia de bytes codificada y almacena el resultado en una matriz de bytes. |
| Convert(Char*, Int32, Byte*, Int32, Boolean, Int32, Int32, Boolean) |
Convierte un búfer de caracteres Unicode en una secuencia de bytes codificada y almacena el resultado en otro búfer. |
| Convert(ReadOnlySpan<Char>, Span<Byte>, Boolean, Int32, Int32, Boolean) |
Convierte un intervalo de caracteres Unicode en una secuencia de bytes codificada y almacena el resultado en otro búfer. |
| Equals(Object) |
Determina si el objeto especificado es igual al objeto actual. (Heredado de Object) |
| GetByteCount(Char[], Int32, Int32, Boolean) |
Cuando se reemplaza en una clase derivada, calcula el número de bytes generados mediante la codificación de un conjunto de caracteres de la matriz de caracteres especificada. Un parámetro indica si se borra el estado interno del codificador después del cálculo. |
| GetByteCount(Char*, Int32, Boolean) |
Cuando se reemplaza en una clase derivada, calcula el número de bytes generados mediante la codificación de un conjunto de caracteres que comienza en el puntero de caracteres especificado. Un parámetro indica si se borra el estado interno del codificador después del cálculo. |
| GetByteCount(ReadOnlySpan<Char>, Boolean) |
Cuando se reemplaza en una clase derivada, calcula el número de bytes generados mediante la codificación de un conjunto de caracteres en el intervalo "chars". Un parámetro indica si se borra el estado interno del codificador después del cálculo. |
| GetBytes(Char[], Int32, Int32, Byte[], Int32, Boolean) |
Cuando se reemplaza en una clase derivada, codifica un conjunto de caracteres de la matriz de caracteres especificada y cualquier carácter del búfer interno en la matriz de bytes especificada. Un parámetro indica si se borra el estado interno del codificador después de la conversión. |
| GetBytes(Char*, Int32, Byte*, Int32, Boolean) |
Cuando se reemplaza en una clase derivada, codifica un conjunto de caracteres a partir del puntero de caracteres especificado y los caracteres del búfer interno en una secuencia de bytes que se almacenan a partir del puntero de bytes especificado. Un parámetro indica si se borra el estado interno del codificador después de la conversión. |
| GetBytes(ReadOnlySpan<Char>, Span<Byte>, Boolean) |
Cuando se reemplaza en una clase derivada, codifica un conjunto de caracteres en el intervalo de caracteres de entrada y los caracteres del búfer interno en una secuencia de bytes que se almacenan en el intervalo de bytes de entrada. Un parámetro indica si se borra el estado interno del codificador después de la conversión. |
| GetHashCode() |
Actúa como la función hash predeterminada. (Heredado de Object) |
| GetType() |
Obtiene el Type de la instancia actual. (Heredado de Object) |
| MemberwiseClone() |
Crea una copia superficial del Objectactual. (Heredado de Object) |
| Reset() |
Cuando se invalida en una clase derivada, vuelve a establecer el codificador en su estado inicial. |
| ToString() |
Devuelve una cadena que representa el objeto actual. (Heredado de Object) |