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 : 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;
}
gcc me retourne
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.