Pregunta

Por ejemplo: "½" o ASCII diciembre 189. Cuando leí los bytes de un archivo de texto El byte [] contiene el valor válido, en este caso 189.

La conversión a Unicode resultados en el carácter Unicode de reemplazo 65533.

  

UnicodeEncoding.Unicode.GetString (b);

La conversión a resultados ASCII en 63 o "?"

  

ASCIIEncoding.ASCII.GetString (b);

Si esto no es posible cuál es la mejor manera de manejar estos datos? Me gustaría ser capaz de realizar las funciones de cadena como Reemplazar ().

¿Fue útil?

Solución

Byte 189 representa un "½" en iso-8859-1 (también conocido como "Latin-1"), por lo que el siguiente es quizá lo que quiere:

var e = Encoding.GetEncoding("iso-8859-1");
var s = e.GetString(new byte[] { 189 });

Todas las cadenas y caracteres en .NET son UTF-16 codificada, por lo que es necesario utilizar un codificador / decodificador para convertir cualquier otra cosa, a veces esto es por defecto (por ejemplo, UTF-8 para casos FileStream), pero es una buena práctica especificar siempre .

Usted necesitará algún tipo de implícita o (mejor) de metadatos explícita para suministrarle la información sobre qué codificación.

Otros consejos

Depende exactamente lo que la codificación es.

No hay tal cosa como "ASCII 189" - ASCII sólo llega hasta 127. Hay muchos sistemas de codificación, que una de 8 bits que utilizan codificaciones ASCII para los primeros 128 valores

.

puede quieren Encoding.Default (que es la codificación predeterminada para su sistema en particular), pero es difícil saber a ciencia cierta. ¿De dónde los datos provienen de?

El viejo PC-8 o extendido juego de caracteres ASCII fue de alrededor antes de que IBM y Microsoft introdujo la idea de páginas de códigos para el mundo del PC. Este fue extendido ASCII - en 1982. De hecho, fue el único conjunto de caracteres disponibles en el PC del en ese momento, hasta que la tarjeta EGA permitió que cargue otras fuentes para VRAM

.

Este fue también el estándar por defecto para los terminales ANSI, y casi todos los BBS Marqué hasta en los años 80 y principios de los 90 se utiliza este conjunto de caracteres para la visualización de menús y cuadros.

Aquí está el código para activar 8 bits ASCII extendido a texto Unicode. Tenga en cuenta el paletón de la llave de código: el GetEncoding ( "437"). Que utiliza página de códigos 437 para traducir el texto ASCII de 8 bits para el equivalente de Unicode.

    string ASCII8ToString(byte[] ASCIIData)
    {
        var e = Encoding.GetEncoding("437");
        return e.GetString(ASCIIData);
    }

System.String[] no puede almacenar caracteres con ASCII > 127 Si usted está tratando de trabajar en todos los caracteres ASCII extendidos como œ ¢ ½ ¾ aquí es el método para convertirla en su binario y equivalente decimal

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top