关于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进行处理,不需要的就不处理。

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

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值