c# .net extended-ascii

c# - ¿Cómo puedo convertir ascii extendido a un System.String?



.net extended-ascii (4)

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

La conversión a Unicode da como resultado el carácter de reemplazo de Unicode 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 poder realizar funciones de cadena como Reemplazar ().


Depende de qué es exactamente la codificación.

No hay tal cosa como "ASCII 189" - ASCII solo sube a 127. Hay muchas codificaciones que codificaciones de 8 bits que usan ASCII para los primeros 128 valores.

Es posible que desee Encoding.Default . Encoding.Default predeterminado (que es la codificación predeterminada para su sistema en particular), pero es difícil saberlo con seguridad. ¿De dónde provienen tus datos?


El antiguo conjunto de caracteres PC-8 o ASCII extendido existía antes de que IBM y Microsoft introdujeran la idea de las páginas de códigos en el mundo de las PC. Este fue ASCII extendido - en 1982. De hecho, era el ÚNICO conjunto de caracteres disponible en las PC en ese momento, hasta que la tarjeta EGA le permitió cargar otras fuentes en VRAM.

Este fue también el estándar por defecto para los terminales ANSI, y casi todos los BBS a los que llamé en los 80 y principios de los 90 usaron este juego de caracteres para mostrar menús y cuadros.

Aquí está el código para convertir ASCII extendido de 8 bits en texto Unicode. Tenga en cuenta el bit clave del código: GetEncoding ("437"). Usó la página de códigos 437 para traducir el texto ASCII de 8 bits al equivalente de Unicode.

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


El byte 189 representa un "½" en iso-8859-1 (también conocido como "Latin-1"), por lo que lo siguiente es quizás lo que quieres:

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

Todas las cadenas y caracteres en .NET están codificados en UTF-16, por lo que necesita usar un codificador / decodificador para convertir cualquier otra cosa, a veces esto está predeterminado (p. Ej., UTF-8 para instancias de FileStream), pero una buena práctica es especificar siempre.

Necesitará alguna forma de metadatos implícitos o (mejores) explícitos para proporcionarle la información sobre qué codificación.


System.String[] no puede almacenar caracteres con ASCII > 127 si está intentando trabajar con cualquier carácter ASCII extendido, como œ ¢ ½ ¾ here es el método para convertirlo en su equivalente binario y decimal.