程序目的:取得指定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。如何能得到正确的信息?
实现方法:利用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。如何能得到正确的信息?
Console.WriteLine(Encoding.GetEncoding("GBK").GetString(b));
这两句的效果是一样的,我早试过了。
现在:BA AB B9 FA D7 F8 D4 D0 C8
兼容的编码方式你去网上查找一下兼容表。
如果改了操作系统的语言设定,检查操作系统的语言设定是否在该兼容表内。byte[] b = Encoding.Default.GetBytes(me.getItemInfo("Title"));
Console.WriteLine(Encoding.Default.GetString(b));
Console.WriteLine(Encoding.GetEncoding("GBK").GetString(b));
转码系统在读入与输出的时候不能正常的转换编码。