unidades una texto secuencia representa example convertir convert como codigo codificar c# encoding utf-8 ascii transliteration

una - encoding utf-8 c#



¿Cómo convertir(transcribir) una cadena de utf8 a ASCII(byte único) en c#? (5)

Esto fue en respuesta a tu otra pregunta, parece que se ha eliminado ... el punto sigue en pie.

Parece un problema clásico de Unicode a ASCII . El truco sería encontrar dónde está sucediendo.

.NET funciona bien con Unicode, suponiendo que se dice que es Unicode para comenzar (o se deja en el valor predeterminado).

Supongo que su aplicación de recepción no puede manejarlo. Entonces, probablemente usaría ASCIIEncoder con EncoderReplacementFallback with String.Empty:

using System.Text; string inputString = GetInput(); var encoder = ASCIIEncoding.GetEncoder(); encoder.Fallback = new EncoderReplacementFallback(string.Empty); byte[] bAsciiString = encoder.GetBytes(inputString); // Do something with bytes... // can write to a file as is File.WriteAllBytes(FILE_NAME, bAsciiString); // or turn back into a "clean" string string cleanString = ASCIIEncoding.GetString(bAsciiString); // since the offending bytes have been removed, can use default encoding as well Assert.AreEqual(cleanString, Default.GetString(bAsciiString));

Por supuesto, en los viejos tiempos, simplemente hacíamos un loop y eliminamos cualquier chars mayor a 127 ... bueno, aquellos de nosotros en los Estados Unidos al menos. ;)

Tengo un objeto de cadena

"con múltiples personajes e incluso personajes especiales"

Estoy tratando de usar

UTF8Encoding utf8 = new UTF8Encoding(); ASCIIEncoding ascii = new ASCIIEncoding();

objetos para convertir esa cadena en ascii. ¿Puedo pedirle a alguien que aclare algo sobre esta simple tarea, que es cazar mi tarde?

EDIT 1: Lo que estamos tratando de lograr es deshacernos de caracteres especiales como algunos de los apóstrofos especiales de Windows. El código que publiqué a continuación como respuesta no se encargará de eso. Básicamente

O''Brian se convertirá en O? Brian. donde ''es uno de los apóstrofes especiales


Para cualquiera que le gusten los métodos de extensión, este es el truco para nosotros.

using System.Text; namespace System { public static class StringExtension { private static readonly ASCIIEncoding asciiEncoding = new ASCIIEncoding(); public static string ToAscii(this string dirty) { byte[] bytes = asciiEncoding.GetBytes(dirty); string clean = asciiEncoding.GetString(bytes); return clean; } } }

(Espacio de nombres del sistema, por lo que está disponible prácticamente de forma automática para todas nuestras cadenas).


Basado en la respuesta de Mark anterior (y el comentario de Geo), creé una versión de dos líneas para eliminar todos los casos de excepción ASCII de una cadena. Proporcionado para las personas que buscan esta respuesta (como yo lo hice).

using System.Text; // Create encoder with a replacing encoder fallback var encoder = ASCIIEncoding.GetEncoding("us-ascii", new EncoderReplacementFallback(string.Empty), new DecoderExceptionFallback()); string cleanString = encoder.GetString(encoder.GetBytes(dirtyString));


Pude resolverlo. En caso de que alguien quiera saber a continuación el código que funcionó para mí:

ASCIIEncoding ascii = new ASCIIEncoding(); byte[] byteArray = Encoding.UTF8.GetBytes(sOriginal); byte[] asciiArray = Encoding.Convert(Encoding.UTF8, Encoding.ASCII, byteArray); string finalString = ascii.GetString(asciiArray);

Avíseme si hay una manera más simple de hacerlo.


Si desea una representación de 8 bits de los caracteres que se utilizan en muchas codificaciones, esto puede ayudarlo.

Debe cambiar la variable de destino de codificación a la codificación que desee.

Encoding targetEncoding = Encoding.GetEncoding(874); // Your target encoding Encoding utf8 = Encoding.UTF8; var stringBytes = utf8.GetBytes(Name); var stringTargetBytes = Encoding.Convert(utf8, targetEncoding, stringBytes); var ascii8BitRepresentAsCsString = Encoding.GetEncoding("Latin1").GetString(stringTargetBytes);