关于MP3的Tag乱码问题

  现在几乎每个版本中都提过音乐播放器中歌曲显示乱码的问题,现在归纳一下主要有两个现象:

   1:当前语言为英文时,歌曲信息显示乱码

   2:中文状态下,歌曲信息显示乱码

   第一种情况出现的原因是因为在英文模式下,MediaScannerClient::setLocale函数没有对“en”设置相应的编码格式,所以中文会出现乱码。

   修改方法如下:

   else if(!strncmp(locale,"en",2)) mLocaleEncoding = kEncodingGBK;

   第二种情况比较复杂,我们分析源码:

 

   for(int i = 0; i < mNames->size(); i++)

      encoding& = possibleEncodings(mValues->getEntry(i));

  上面的代码是先对所有的Tag进行编码检测,然后进行&操作。

   if(encoding & mLocaleEncoding)

      convertValues(mLocaleEncoding);

   然后检测是否存在有与当前编码方式匹配的,如果有则进行转换,到这里我们是否可以假设一种情况:

   如果某个Tag不需要进行转换,另外一个Tag中含有当前的编码方式,于是所有的tag都将通过convertValues函数进行转换,然后乱码现象出现了。这个问题是常见的,我们会发现有些歌曲它的名字是正常的,但是艺术家信息却是乱码,这就是造成这种现象的原因。

   于是我们有了以下的处理方法:对单个Tag进行检测转换。

   for(int i = 0; i < mNames->size(); i++) {

      encoding& = possibleEncodings(mValues->getEntry(i));  

      if(encoding & mLocaleEncoding)

           convertValues(mLocaleEncoding,i);

  }

   我们只需要对需要转换的Tag进行处理,不需要的就不处理。

  以上只是我的个人想法,有不对的地方还请指出来,大家有好的方法也可以交流下。

发布了36 篇原创文章 · 获赞 23 · 访问量 59万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览