// unicode.c #include #include #include wchar_t convert(wchar_t ch); int main(int argc, char* argv[]) { setlocale(LC_ALL, ""); FILE* input = stdin; FILE* output = stdout; if ( argc == 2 && (input = fopen(argv[1], "r")) == NULL ) return fwprintf(stderr, L"es2ascii: error: could not open %s\n", argv[1]), 1; wchar_t ch = 0; while ( fwscanf(input, L"%lc", &ch) == 1 ) fwprintf(output, L"%lc", convert(ch)); return 0; } wchar_t convert(wchar_t ch) { if ( ch < 128 ) return ch; switch ( ch ) { case L'á': case L'à': case L'â': case L'ã': case L'ä': case L'å': return L'a'; case L'é': case L'è': case L'ê': case L'ë': return L'e'; case L'í': case L'ì': case L'î': case L'ï': return L'i'; case L'ó': case L'ò': case L'ô': case L'õ': case L'ö': return L'o'; case L'ú': case L'ù': case L'û': case L'ü': return L'u'; case L'Á': case L'À': case L'Â': case L'Ã': case L'Ä': case L'Å': return L'A'; case L'É': case L'È': case L'Ê': case L'Ë': return L'E'; case L'Í': case L'Ì': case L'Î': case L'Ï': return L'I'; case L'Ó': case L'Ò': case L'Ô': case L'Õ': case L'Ö': return L'O'; case L'Ú': case L'Ù': case L'Û': case L'Ü': return L'U'; case L'ñ': return L'n'; case L'Ñ': return L'N'; case L'¿': return L'?'; case L'¡': return L'!'; case L'«': case L'»': case L'“': case L'”': return L'"'; case L'´': case L'’': return L'\''; case L'–': return L'-'; case L'Ç': return L'C'; case L'ç': return L'c'; // case L'': return L''; default: fwprintf(stderr, L"Unconverted [%lc]\n", ch); return ch; } } /* Latin-1: case L'¢': case L'£': case L'¤': case L'¥': case L'¦': case L'§': case L'¨': case L'©': case L'ª': case L'«': case L'¬': case L'-': case L'®': case L'¯': case L'°': case L'±': case L'²': case L'³': case L'µ': case L'¶': case L'·': case L'¸': case L'¹': case L'º': case L'»': case L'¼': case L'½': case L'¾': case L'¿': case L'Æ': case L'Ð': case L'×': case L'Ø': case L'Ý': case L'Þ': case L'ß': case L'æ': case L'ð': case L'÷': case L'ø': case L'ý': case L'þ': case L'ÿ': */