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):
gcc me retourne
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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; }
La ligne 34, c'est la ligne de la fonction iconv.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
Partager