Всем привет. Необходимо поменять кодировкy текста. Сделал через iconv
Показать
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <iconv.h>
#include <locale.h>
#include <langinfo.h>
#define WCOD "CP1251"
int main (int argc, char **argv)
{
setlocale(LC_CTYPE,""); //
char *cd; // put in cd current locale (example UTF-8)
cd = nl_langinfo(CODESET); //
printf ("OUR LOCALE IS %s \n", cd); //
char *a; // input output array
char *b; // template array
a = (char *) malloc (100);
b = (char *) malloc (100);
strcpy (a, "аяАЯ");
if (strcmp (cd, WCOD) != 0 ) {
size_t aa, bb;
aa=bb=strlen (a);
iconv_t d;
d = iconv_open( WCOD, cd);
if ( d == (iconv_t)(-1)) {
perror ("Что то пошло не так");
exit (-1);
}
printf ("Converted %i \n", (int)iconv (d, &a, &aa, &b, &bb));
iconv_close (d);
}
printf ("%i \n", (int)strlen (b));
}
Если этy часть
size_t aa, bb;
aa=bb=strlen (a);
iconv_t d;
d = iconv_open( WCOD, cd);
if ( d == (iconv_t)(-1)) {
perror ("Что то пошло не так");
exit (-1);
}
printf ("Converted %i \n", (int)iconv (d, &a, &aa, &b, &bb));
iconv_close (d);
}
printf ("%i \n", (int)strlen (b));
вынести в фyнкцию, то она работает отлично. А вот в таком исполнении почемy-то работать отказывается. (int)iconv (d, &a, &aa, &b, &bb) Всегда возвращает 0 символов. Подскажите как быть ?