音译C中的重音字母

问题描述:

是否可以音译重音只有使用iconv?音译C中的重音字母

iconv_t iconv = iconv_open("ASCII//TRANSLIT", "utf-8"); 

比如我想音译(西班牙)á, é, í, óa, e, i, o,但我需要保持ñ。也许有一种方法可以在iconv中设置跳过的字母吗?

我知道我可以使用简单的替换,但首先我想知道是否有更好的解决方案。

+0

的iconv没有期权跳过一个特定的字符。剥去所有口音,但离开的目的是什么?另外你的输入编码是什么,你想要的输出编码是什么? – Gnqz

+0

@Gnqz输入和输出编码都是UTF-8。 ñ是一封真实的信件,而不是重音字母。 –

+0

UTF8涵盖了很多符号:从拉丁到cyrilic,应如何处理cyrilic或greec符号? – Gnqz

由于不提供跳过特定字符的选项,您无法通过简单使用iconv工具来实现您在问题中描述的行为。你可以做的是创建一个查找表(考虑到你的输入只能使用UTF8 Latin1)。

下面的代码块可以做的伎俩:

char* stripAccents(char* text) { 
    char *p = text; 
    unsigned char c = 0; 
    const char* trans = "AAAAAAECEEEEIIIIDÑOOOOOx0UUUUYPsaaaaaaeceeeeiiiiOñooooo/0uuuuypy"; 
    while (*(p) != '\0') 
    { 
     c = *(p); 
     if (c >= 192) { 
      *(p) = trans [ c - 192 ]; 
     } 
     ++p; 
    } 
    return text; 
    }