Actualización: noviembre 2007
Convierte una secuencia de bytes codificados en un conjunto de caracteres.
Espacio de nombres:
System.Text
Ensamblado:
mscorlib (en mscorlib.dll)
Visual Basic (Declaración)
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public MustInherit Class Decoder
[SerializableAttribute]
[ComVisibleAttribute(true)]
public abstract class Decoder
[SerializableAttribute]
[ComVisibleAttribute(true)]
public ref class Decoder abstract
/** @attribute SerializableAttribute */
/** @attribute ComVisibleAttribute(true) */
public abstract class Decoder
public abstract class Decoder
Para obtener una instancia de una implementación de la clase Decoder, se debe usar en la aplicación el método GetDecoder de una implementación de Encoding.
El método GetCharCount determina el número de caracteres resultante de la descodificación de una secuencia de bytes, y el método GetChars realiza la descodificación real. Hay varias versiones de ambos métodos disponibles en la clase Decoder.
Un objeto Decoder mantiene la información de estado entre las llamadas sucesivas a los métodos GetChars o Convert, de modo que puede descodificar correctamente secuencias de bytes que abarquen distintos bloques. El objeto Decoder también conserva los bytes situados al final de los bloques de datos y los emplea en la siguiente operación de descodificación. Por tanto, GetDecoder y GetEncoder son útiles para transmisiones en red y las operaciones con archivos, dado que estas operaciones tratan a menudo con bloques de datos, no con secuencias de datos completas.
Nota: |
|---|
Cuando la aplicación ha terminado una secuencia de datos, debe establecer el parámetro flush en true en la llamada a método adecuada para garantizar que se vacíe la información de estado. Si se produce una excepción o si la aplicación modifica las secuencias, debe llamar a Reset para borrar el estado interno del objeto Decoder. |
Consideraciones de versión
Decoder o el objeto Encoder se puede serializar durante una operación de conversión. El estado del objeto se conserva si se ha deserializado en la misma versión de .NET Framework, pero se pierde si se deserializa en otra versión.
Notas para los herederos: Cuando una aplicación hereda de esta clase, debe invalidar todos los miembros.
En el siguiente ejemplo se muestra cómo usar Decoder para convertir dos matrices de bytes diferentes en una matriz de caracteres. Uno de los bytes de caracteres abarca las matrices. Esto es similar a lo que un objeto StreamReader hace internamente cuando lee una secuencia.
Imports System
Imports System.Text
Public Class dec
Public Shared Sub Main()
' These bytes in UTF-8 correspond to 3 different Unicode
' characters: space (U+0020), # (U+0023), and the biohazard
' symbol (U+2623). Note the biohazard symbol requires 3 bytes
' in UTF-8 (hexadecimal e2, 98, a3). Decoders store state across
' multiple calls to GetChars, handling the case when one char
' is in multiple byte arrays.
Dim bytes1 As Byte() = {&H20, &H23, &HE2}
Dim bytes2 As Byte() = {&H98, &HA3}
Dim chars(3) As Char
Dim d As Decoder = Encoding.UTF8.GetDecoder()
Dim charLen As Integer = d.GetChars(bytes1, 0, bytes1.Length, chars, 0)
' The value of charLen should be 2 now.
charLen += d.GetChars(bytes2, 0, bytes2.Length, chars, charLen)
Dim c As Char
For Each c In chars
Console.Write("U+{0:X4} ", Convert.ToUInt16(c) )
Next c
End Sub
End Class
using System;
using System.Text;
public class dec
{
public static void Main()
{
// These bytes in UTF-8 correspond to 3 different Unicode
// characters: space (U+0020), # (U+0023), and the biohazard
// symbol (U+2623). Note the biohazard symbol requires 3 bytes
// in UTF-8 (hexadecimal e2, 98, a3). Decoders store state across
// multiple calls to GetChars, handling the case when one char
// is in multiple byte arrays.
byte[] bytes1 = { 0x20, 0x23, 0xe2 };
byte[] bytes2 = { 0x98, 0xa3 };
char[] chars = new char[3];
Decoder d = Encoding.UTF8.GetDecoder();
int charLen = d.GetChars(bytes1, 0, bytes1.Length, chars, 0);
// The value of charLen should be 2 now.
charLen += d.GetChars(bytes2, 0, bytes2.Length, chars, charLen);
foreach(char c in chars)
Console.Write("U+{0:X4} ", (ushort)c);
}
}
using namespace System;
using namespace System::Text;
int main()
{
// These bytes in UTF-8 correspond to 3 different Unicode
// characters: space (U+0020), # (U+0023), and the biohazard
// symbol (U+2623). Note the biohazard symbol requires 3 bytes
// in UTF-8 (hexadecimal e2, 98, a3). Decoders store state across
// multiple calls to GetChars, handling the case when one char
// is in multiple byte arrays.
array<Byte>^bytes1 = {0x20,0x23,0xe2};
array<Byte>^bytes2 = {0x98,0xa3};
array<Char>^chars = gcnew array<Char>(3);
Decoder^ d = Encoding::UTF8->GetDecoder();
int charLen = d->GetChars( bytes1, 0, bytes1->Length, chars, 0 );
// The value of charLen should be 2 now.
charLen += d->GetChars( bytes2, 0, bytes2->Length, chars, charLen );
for ( UInt16 index(0); index < chars->Length; ++index )
{
Console::Write( "U+{0:X4} ", static_cast<UInt16>(chars[ index ]) );
}
}
import System.*;
import System.Text.*;
public class Dec
{
public static void main(String[] args)
{
// These bytes in UTF-8 correspond to 3 different Unicode
// characters: space (U+0020), # (U+0023), and the biohazard
// symbol (U+2623). Note the biohazard symbol requires 3 bytes
// in UTF-8 (hexadecimal e2, 98, a3). Decoders store state across
// multiple calls to GetChars, handling the case when one char
// is in multiple byte arrays.
ubyte bytes1[] = { 0x20, 0x23, 0xE2 };
ubyte bytes2[] = { 0x98, 0xA3 };
char chars[] = new char[3];
Decoder d = Encoding.get_UTF8().GetDecoder();
int charLen = d.GetChars(bytes1, 0, bytes1.length, chars, 0);
// The value of charLen should be 2 now.
charLen += d.GetChars(bytes2, 0, bytes2.length, chars, charLen);
for (int iCtr = 0; iCtr < chars.length; iCtr++) {
char c = chars[iCtr];
Console.Write("U+{0} ",((Int16)c).ToString("X4"));
}
} //main
} //Dec
System..::.Object
System.Text..::.Decoder
Seguridad para subprocesos
Todos los miembros static (Shared en Visual Basic) públicos de este tipo son seguros para la ejecución de subprocesos. No se garantiza que los miembros de instancias sean seguros para la ejecución de subprocesos.
Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Windows CE, Windows Mobile para Smartphone, Windows Mobile para Pocket PC, Xbox 360
.NET Framework y .NET Compact Framework no admiten todas las versiones de cada plataforma. Para obtener una lista de las versiones compatibles, vea Requisitos de sistema de .NET Framework.
.NET Framework
Compatible con: 3.5, 3.0, 2.0, 1.1, 1.0
.NET Compact Framework
Compatible con: 3.5, 2.0, 1.0
XNA Framework
Compatible con: 2.0, 1.0
Referencia
Otros recursos