音译C中的重音字母
问题描述:
是否可以音译重音只有使用iconv?音译C中的重音字母
iconv_t iconv = iconv_open("ASCII//TRANSLIT", "utf-8");
比如我想音译(西班牙)á, é, í, ó
到a, e, i, o
,但我需要保持ñ
。也许有一种方法可以在iconv中设置跳过的字母吗?
我知道我可以使用简单的替换,但首先我想知道是否有更好的解决方案。
答
由于不提供跳过特定字符的选项,您无法通过简单使用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;
}
的iconv没有期权跳过一个特定的字符。剥去所有口音,但离开的目的是什么?另外你的输入编码是什么,你想要的输出编码是什么? – Gnqz
@Gnqz输入和输出编码都是UTF-8。 ñ是一封真实的信件,而不是重音字母。 –
UTF8涵盖了很多符号:从拉丁到cyrilic,应如何处理cyrilic或greec符号? – Gnqz