在 C 中音译重音字母

Transliterate accented letters in C

是否可以使用 iconv 音译重音?

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

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

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

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

下面的一段代码可以解决这个问题:

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