在C中音译重音字母

时间:2017-10-06 10:22:02

标签: c unicode encoding iconv

是否可以使用iconv音译重音

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

例如,我想将(西班牙语)á, é, í, ó音译为a, e, i, o,但我需要保留ñ。也许有办法在iconv中设置跳过的字母吗?

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

1 个答案:

答案 0 :(得分:0)

您无法通过简单地使用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;
  }