程序目的:取得指定MP3,WMA等文件的TAG信息。
实现方法:利用WindowsMediaPlayer的方法取得信息。
代码如下:
WindowsMediaPlayer player = new WindowsMediaPlayer();
            IWMPMedia me = player.newMedia(strPath);            EntitySongTag etSt = new EntitySongTag();            etSt.TITLE = me.getItemInfo("Title");
            etSt.SINGER = me.getItemInfo("Author");
            etSt.Duration = me.getItemInfo("Duration");
            etSt.FileSize = me.getItemInfo("FileSize");
            etSt.CDName = me.getItemInfo("WM/AlbumTitle");
            etSt.YEAR = me.getItemInfo("WM/Year");目前问题:中文系统下正常读取,但是在非中文系统下读取中文歌曲信息时,取出的信息乱码。
尝试:试过使用Encoding进行转码:            byte[] b = Encoding.Default.GetBytes(me.getItemInfo("Title"));
            Console.WriteLine(Encoding.Default.GetString(b));
            Console.WriteLine(Encoding.GetEncoding("GBK").GetString(b));
输出结果:
コォケ晙鋕ミネヒオトMTVク霽昮ェハヌナョラモ(Jini Narration)
韩国?孕人的MTV歌曲因为是女子(Jini Narration)正确结果:
韩国最感人的MTV歌曲因为是女子(Jini Narration)请教各位高手:
1。由于目前使用WindowsMediaPlayer读取TAG信息,读出的类型只能是string,(如果能读成byte[],就可以正常转码了)。有没有其它更好的读取TAG的方法?
2。为什么只有其中的一两个字会出现乱码?
3。如何能得到正确的信息?

解决方案 »

  1.   

    Console.WriteLine(Encoding.GetEncoding("GB2312").GetString(b))试试看!!!
      

  2.   

    Console.WriteLine(Encoding.GetEncoding("GB2312").GetString(b));
    Console.WriteLine(Encoding.GetEncoding("GBK").GetString(b));
    这两句的效果是一样的,我早试过了。
      

  3.   

    补充说明一下,我将读取的数据保存一下发现“コォケ晙鋕ミネ”这几个字有点奇怪,保存下来的数据显示跟原来一模一样,但是查看了一下十六进制码发现竟然有两个字节数据不一样,好像是使用byte[] b = Encoding.Default.GetBytes(me.getItemInfo("Title"))这一句时就错了,不懂求教。原来:BA AB B9 FA D7 EE B8 D0 C8
    现在:BA AB B9 FA D7 F8 D4 D0 C8
      

  4.   

    在MSDN中没有找到WindowsMediaPlayer 的相关信息,我的MSDN不全?
      

  5.   

    有一些操作系统的编码方式和unicode间不能由转码系统自动转换,
    兼容的编码方式你去网上查找一下兼容表。
    如果改了操作系统的语言设定,检查操作系统的语言设定是否在该兼容表内。byte[] b = Encoding.Default.GetBytes(me.getItemInfo("Title"));
    Console.WriteLine(Encoding.Default.GetString(b));
    Console.WriteLine(Encoding.GetEncoding("GBK").GetString(b));
    转码系统在读入与输出的时候不能正常的转换编码。
      

  6.   

    首先你要了解字符的编码格式,中文基本大都是GB2312编码,同理韩文、日文都属于不同的编码,对于这种问题,你可以在读取信息时使用UTF8编码试下