traductor tabla leer como codigo binario aprender abecedario ascii

ascii - tabla - como leer codigo binario



¿Cómo traduzco los caracteres de 8 bits a los de 7 bits?(es decir, Ü a U) (15)

Estoy buscando pseudocódigo, o código de muestra, para convertir caracteres ascii de mayor bit (como, Ü que se extiende ascii 154) en U (que es ascii 85).

Mi conjetura inicial es que, dado que solo hay unos 25 caracteres Ascii que son similares a los caracteres ascii de 7 bits, se debería utilizar una matriz de traducción.

Avísame si puedes pensar en otra cosa.


Hay un artículo sobre CodeProject que se ve bien.

También la conversión usando la página de códigos 1251 me interesa (ver otra respuesta).

No me gustan las tablas de conversión, ya que la cantidad de caracteres en Unicode es tan grande que fácilmente se pierde una.



Uso esta función para arreglar una variable con acentos para pasar a una función de jabón de VB6:

Function FixAccents(ByVal Valor As String) As String Dim x As Long Valor = Replace(Valor, Chr$(38), "&#" & 38 & ";") For x = 127 To 255 Valor = Replace(Valor, Chr$(x), "&#" & x & ";") Next FixAccents = Valor End Function

Y dentro de la función soap hago esto (para la variable Filename):

FileName = HttpContext.Current.Server.HtmlDecode(FileName)


En la página de códigos 1251, los caracteres se codifican con 2 bytes: uno para el carácter básico y otro para la variación. Luego, cuando codifique en ASCII, solo se conservarán los caracteres básicos.

public string RemoveDiacritics(string text) { return System.Text.Encoding.ASCII.GetString(System.Text.Encoding.GetEncoding(1251).GetBytes(text)); }

De: http://www.clt-services.com/blog/post/Enlever-les-accents-dans-une-chaine-(proprement).aspx


Para los usuarios de .NET, el artículo en CodeProject (gracias a la sugerencia de GvS ) sí responde la pregunta de manera más correcta que cualquier otra que haya visto hasta ahora.

Sin embargo, el código en ese artículo (en la solución n. ° 1) es engorroso. Aquí hay una versión compacta:

// Based on http://www.codeproject.com/Articles/13503/Stripping-Accents-from-Latin-Characters-A-Foray-in private static string LatinToAscii(string inString) { var newStringBuilder = new StringBuilder(); newStringBuilder.Append(inString.Normalize(NormalizationForm.FormKD) .Where(x => x < 128) .ToArray()); return newStringBuilder.ToString(); }

Para ampliar un poco la respuesta, este método usa String.Normalize que:

Devuelve una nueva cadena cuyo valor de texto es el mismo que esta cadena, pero cuya representación binaria está en el formulario de normalización Unicode especificado.

Específicamente en este caso usamos el FormKD NormalizationForm , descrito en esos mismos documentos de MSDN como tales:

FormKD: indica que una cadena Unicode se normaliza utilizando la descomposición de compatibilidad completa.

Para obtener más información acerca de los formularios de normalización Unicode, consulte el Anexo # 15 de Unicode .


¿Convertir realmente U a U es lo que te gustaría hacer? No sé sobre otros idiomas, pero en alemán Ü se convertiría en Ue, ö se convertiría en oe, etc.


Creo que simplemente no puedes.

Normalmente hago algo como eso:

AccentString = ''ÀÂÄÉÈÊ [y todo lo demás]''
ConvertString = ''AAAEEE [y todo lo demás]''

Buscando el carácter en AccentString y reemplazándolo por el mismo índice en ConvertString

HTH


Creo que ya lo has clavado en la cabeza. Dado su dominio limitado, una matriz de conversión o hash es su mejor opción. No tiene sentido crear algo complejo para intentar hacerlo automágicamente.


De hecho, como lo propone la función inexistente: "iconv" existe para manejar todas las conversiones raras, está disponible en casi todos los lenguajes de programación y tiene una opción especial que intenta convertir los caracteres que faltan en el conjunto de objetivos con aproximaciones.

Usa iconv para simplemente convertir tu cadena de entrada UTF-8 en ASCII de 7 bits.

De lo contrario, siempre terminará golpeando el caso de la esquina: una entrada de 8 bits usando una página de códigos diferente con un conjunto diferente de caracteres (por lo tanto no funciona en absoluto con su tabla de conversión), olvidó mapear un último caracter estúpido acentuado (ha mapeado todas las tumbas / acento agudo, pero se olvidó de mapear el caron checo o el nórdico ''°''), etc.

Por supuesto, si desea aplicar la solución a un pequeño problema específico (hacer nombres de archivos compatibles con el sistema de archivos para su colección de música), los arreglos de búsqueda son el camino a seguir (ya sea una matriz que para cada número de código por encima de 128 una aproximación menor a 128 según lo propuesto por JeeBee, o los pares fuente / destino propuestos por vIceBerg dependiendo de qué funciones de sustitución ya están disponibles en el idioma de su elección), porque se piratean rápidamente y comprueban rápidamente los elementos faltantes.


Hm, ¿por qué no cambiar la codificación de la cadena con iconv?


La mayoría de los lenguajes tienen una forma estándar de reemplazar caracteres acentuados con ASCII estándar, pero esto depende del idioma y, a menudo, implica reemplazar un único carácter acentuado por dos ASCII. por ejemplo, en alemán ü se convierte en ue. Entonces, si quieres manejar correctamente los lenguajes naturales, es mucho más complicado de lo que crees.


Los 128 caracteres superiores no tienen significados estándar. Pueden tomar diferentes interpretaciones (páginas de códigos) dependiendo del idioma del usuario.

Por ejemplo, ver portugués versus francés canadiense

A menos que conozca la página de códigos, su "traducción" será incorrecta a veces.

Si vas a asumir una determinada página de códigos (por ejemplo, la página de códigos de IBM original), funcionará una matriz de traducción, pero para los verdaderos usuarios internacionales, será incorrecta.

Esta es una razón por la cual el Unicode se ve favorecido por el sistema anterior de páginas de códigos.

Estrictamente hablando, ASCII solo tiene 7 bits.


Parece que lo has clavado, creo. Una matriz de bytes de 128 bytes de longitud, indexada por char y 127, que contiene el carácter de 7 bits correspondiente para el carácter de bit de 8 bits.


Realmente depende de la naturaleza de tus cadenas fuente. Si conoce la codificación de la cadena y sabe que se trata de una codificación de 8 bits, por ejemplo, ISO Latin 1 o similar, entonces bastará una matriz estática simple:

static const char xlate[256] = { ..., [''é''] = ''e'', ..., [''Ü''] = ''U'', ... } ... new_c = xlate[old_c];

Por otro lado, si tiene una codificación diferente, o si está utilizando cadenas codificadas en UTF-8, probablemente encontrará que las funciones en la biblioteca de la ICU son muy útiles.


Una matriz de búsqueda es probablemente la forma más simple y rápida de lograr esto. Esta es una forma en que puede convertir, por ejemplo, ASCII en EBCDIC.