www w3schools w33 school html_basic how example code asp c utf-8 ascii

w3schools - UTF-8-> ASCII en lenguaje C



w33 school html (5)

Tengo una pregunta simple que no puedo encontrar en Internet, ¿cómo puedo convertir UTF-8 en ASCII (en su mayoría caracteres acentuados para el mismo carácter sin acento) en C usando solo la lib estándar? Encontré soluciones para la mayoría de los idiomas, pero no para C en particular.

¡Gracias!

EDITAR: Algunos de los tipos amables que me comentaron me hicieron revisar dos veces lo que necesitaba y exageré. Solo necesito una idea sobre cómo hacer una función que sí lo haga: char con acento -> char sin acento. :)


Cada biblioteca de soporte decente de Unicode (no la biblioteca estándar, por supuesto) tiene una forma de descomponer una cadena en formato KC o KD. Que separa los signos diacríticos de las letras. Te da una oportunidad de filtrarlos. No estoy tan seguro de que valga la pena perseguirlo, el resultado es solo un galimatías para el lector del idioma nativo y no todas las letras son descomponibles. En otras palabras, basura con signos de interrogación.


Dado que esto es tarea, supongo que su profesor no tiene ni idea y no sabe nada sobre UTF-8, y probablemente esté atrapado en la década de 1980 con "páginas de códigos" y "ASCII extendido" (palabras que debe borrar de su vocabulario si usted no lo ha hecho ya) Es probable que su maestro quiera que escriba una tabla de búsqueda de 128 bytes que asigna CP437 o Windows-1252 bytes en el rango de 128-255 a letras ASCII de aspecto similar. Sería algo así como ...

void strip_accents(unsigned char *dest, const unsigned char *src) { static const unsigned char lut[128] = { /* mapping here */ }; do { *dest++ = *src < 128 ? *src : lut[*src]; } while (*src++); }


Eche un vistazo a libiconv . Incluso si insiste en hacerlo sin bibliotecas, puede encontrar una inspiración allí.


En general, no puedes. UTF-8 cubre mucho más que los caracteres acentuados.


No hay una forma construida de hacerlo. Hay muy poca diferencia entre UTF-8 y ASCII a menos que esté hablando de caracteres de alto nivel, que de todos modos no pueden representarse en ASCII.

Si tiene una asignación específica que desea (como a con acento -> a), entonces probablemente debería manejar eso como una operación de reemplazo de cadenas.