读取MP3(ID3v2)文件属性时,中文歌曲显示乱码,求各位大牛指导啊!
小弟最近在提取MP3 文件属性,提取中文歌曲信息时,获得的标题,作者,专辑等都是乱码,很是无语,求各位大牛指导,非常感谢!
FILE *fp;
fp=fopen("e:\\music\\时光机.mp3","rb");
if(fp==NULL)
{
MessageBox(_T("Can't open file"));
}
else{
//id3v2标签头共10字节
struct ID3V2TagH
{
char Header[3];
char Ver[1];
char Revision[1];
char Flag[1];
char Size[4];
};
//id3v2标签帧
struct ID3V2Frame
{
char frameID[4]; /* 用四个字符标识一个帧,说明其内容,4字节 */
char size[4]; /* 帧内容的大小,不包括帧头,不得小于1,4字节 */
char flags[2]; /* 存放标志,只定义了6 位,2字节 */
};
//标签帧链表
struct ID3V2TagFL
{
char a[200];
};
struct ID3V2TagFL frameBody;
struct ID3V2TagH tagHeader;
struct ID3V2Frame frameHeader;
//memset(&tagHeader, 0, sizeof(struct ID3V2TagH));
//fseek(fp,-128L,SEEK_END);
fread(tagHeader.Header,3,1,fp);//读取前3字节
fread(tagHeader.Ver,1,1,fp);//读取1字节
fread(tagHeader.Revision,1,1,fp);//读取1字节
fread(tagHeader.Flag,1,1,fp);//读取1字节
fread(tagHeader.Size,4,1,fp);//读取4字节
int total_size;
total_size = tagHeader.Size[0]*0x1000000
+tagHeader.Size[1]*0x10000
+tagHeader.Size[2]*0x100
+tagHeader.Size[3];
fread(frameHeader.frameID,4,1,fp);//读取4字节
fread(frameHeader.size,4,1,fp);//读取4字节
fread(frameHeader.flags,2,1,fp);//读取2字节
int fSize;
fSize = frameHeader.size[0]*0x1000000
+frameHeader.size[1]*0x10000
+frameHeader.size[2]*0x100
+frameHeader.size[3];
fread(frameBody.a,fSize,1,fp);//读取fSize字节
CString str;
for(int i = 0; i<fSize;i++)
{
str+= frameBody.a[0];
}
MessageBox(str);
}
FILE *fp;
fp=fopen("e:\\music\\时光机.mp3","rb");
if(fp==NULL)
{
MessageBox(_T("Can't open file"));
}
else{
//id3v2标签头共10字节
struct ID3V2TagH
{
char Header[3];
char Ver[1];
char Revision[1];
char Flag[1];
char Size[4];
};
//id3v2标签帧
struct ID3V2Frame
{
char frameID[4]; /* 用四个字符标识一个帧,说明其内容,4字节 */
char size[4]; /* 帧内容的大小,不包括帧头,不得小于1,4字节 */
char flags[2]; /* 存放标志,只定义了6 位,2字节 */
};
//标签帧链表
struct ID3V2TagFL
{
char a[200];
};
struct ID3V2TagFL frameBody;
struct ID3V2TagH tagHeader;
struct ID3V2Frame frameHeader;
//memset(&tagHeader, 0, sizeof(struct ID3V2TagH));
//fseek(fp,-128L,SEEK_END);
fread(tagHeader.Header,3,1,fp);//读取前3字节
fread(tagHeader.Ver,1,1,fp);//读取1字节
fread(tagHeader.Revision,1,1,fp);//读取1字节
fread(tagHeader.Flag,1,1,fp);//读取1字节
fread(tagHeader.Size,4,1,fp);//读取4字节
int total_size;
total_size = tagHeader.Size[0]*0x1000000
+tagHeader.Size[1]*0x10000
+tagHeader.Size[2]*0x100
+tagHeader.Size[3];
fread(frameHeader.frameID,4,1,fp);//读取4字节
fread(frameHeader.size,4,1,fp);//读取4字节
fread(frameHeader.flags,2,1,fp);//读取2字节
int fSize;
fSize = frameHeader.size[0]*0x1000000
+frameHeader.size[1]*0x10000
+frameHeader.size[2]*0x100
+frameHeader.size[3];
fread(frameBody.a,fSize,1,fp);//读取fSize字节
CString str;
for(int i = 0; i<fSize;i++)
{
str+= frameBody.a[0];
}
MessageBox(str);
}
...全文
相关推荐
mp3标签读取,包括了id3v1 id3v2 apev2三种格式
mp3标签读取最详细源码,包括了id3v1 id3v2 apev2三种格式
Android media 播放mp3时ID3 tag 显示乱码的探究分析。
我们从windows的中文操作系统下,下载下来mp3,Tag正常显示,推进Android机后,却出现乱码,这是为什么呢? 之所以在中文系统中没有特别的问题,是因为通常电脑生成的MP3简体中文ID3标签是ID3V2.3版本,编码是ANSI,GB2312/GBK从双字节上兼容ANSI标准。而在UTF-8/Unicode为标准的系统中如Linux(Ubuntu),Android中就容易出现这种问题。 解决办法先明确几个知识点:首先明确一点,文件不存在什么编码(归根结底文件都是二进制文件,用ue
MP3文件ID3v2,ID3v2,APEv2标签读取
读取MP3问文件ID3v2,ID3v2,APEv2标签的程序,上传之与大家交流。
mp3 ID3v1中文乱码完美解决方法
绍mp3 ID3v1中文乱码完美解决方法
读取mp3文件的ID3信息
该插件可以读取mp3文件的信息 如专辑名,歌手名,专辑图片等 提供两个接口


