[libiconv] conversion en unicode
Bonjour,
J'ai un fichier audio contenant un tag id3v1. L'encodage des informations (artiste, album, ect...) du tag est en windows-1251 (cyrilique). J'aimerais convertir gràce à la bibliotèque libiconv ces informations en unicode.
Avant de parler du code j'aimerais déjà comprendre une chose.
C'est très bien de convertir ça en unicode mais un char c'est généralement 1 octet, or en unicode il y a plus d'un octet pour coder un caractère. Donc comment vais-je pouvoir gérer ça en C ?
Voici mon essai de code pour utiliser libiconv (la partie pour récupéré le tag fonctionne):
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
| #include <stdio.h>
#include <id3.h>
#include <iconv.h>
#define NB_CHAR_IN 1024
#define NB_CHAR_OUT 8192
int main(void)
{
ID3Tag *p_my_tag;
ID3Frame *p_my_frame;
ID3Field *p_my_field;
char album[NB_CHAR_IN];
char album_unicode[NB_CHAR_OUT];
size_t input=NB_CHAR_IN, output=NB_CHAR_OUT;
iconv_t my_conv;
p_my_tag = ID3Tag_New();
ID3Tag_Link(p_my_tag, "Romashki.mp3");
p_my_frame = ID3Tag_FindFrameWithID(p_my_tag, ID3FID_ALBUM);
p_my_field = ID3Frame_GetField(p_my_frame, ID3FN_TEXT);
ID3Field_GetASCII(p_my_field, album, 1024);
printf("Album en CP1251: %s\n", album);
my_conv = iconv_open("CP1251", "UTF-8");
iconv(my_conv, &album, &input, &album_unicode, &output);
printf("Album en Unicode: %s\n", album_unicode);
iconv_close(my_conv);
ID3Tag_Delete(p_my_tag);
return 0;
} |
gcc me retourne
Citation:
translate.c: In function `main':
translate.c:34: attention : passage de l'argument n°2 de « iconv » d'un type pointeur incompatible
translate.c:34: attention : passage de l'argument n°4 de « iconv » d'un type pointeur incompatible
La ligne 34, c'est la ligne de la fonction iconv.