在 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;
}
是否可以使用 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;
}