歌曲名、艺术家名显示乱码

歌曲名、艺术家名显示乱码

MediaPickerActivity.java中添加方法changeStringEncode用来转换字符串编码:

 

publicstatic String changeStringEncode(String content)

{

 if(java.nio.charset.Charset.forName("GB2312").newEncoder().canEncode(content))

  {

       //Log.d(TAG, "GB2312...");

  }

  elseif(java.nio.charset.Charset.forName("ISO-8859-1").newEncoder().canEncode(content))

  {

       //Log.d(TAG, "ISO-8859-1...");

      try

       {

                 content= new String(content.getBytes("ISO-8859-1"), "GBK");

       }

       catch (UnsupportedEncodingException e)

       {

                 //TODO Auto-generated catch block

                 e.printStackTrace();

        }

   }

   else if(java.nio.charset.Charset.forName("GBK").newEncoder().canEncode(content))

   {

        //Log.d(TAG, "GBK...");

   }

   elseif(java.nio.charset.Charset.forName("UTF-8").newEncoder().canEncode(content))

   {

                   try {

                 content= new String(content.getBytes("UTF-8"), "GBK");

        }

        catch (UnsupportedEncodingException e){

                 //TODO Auto-generated catch block

                 e.printStackTrace();

        }

                 //Log.d(TAG,"UTF-8...");

    }

    else if(java.nio.charset.Charset.forName("UTF-16").newEncoder().canEncode(content))

    {

        //Log.d(TAG, "UTF-16...");

    }

    return content;

}

之后在bindView中修改转换标题名,专辑名,艺术家名:

//String name =cursor.getString(mTitleIdx);

String name =changeStringEncode(cursor.getString(mTitleIdx));

 

//name =cursor.getString(mAlbumIdx);

name = changeStringEncode(cursor.getString(mAlbumIdx));

 

//name =cursor.getString(mArtistIdx);

name = changeStringEncode(cursor.getString(mArtistIdx));

 

二、歌词在切换语言后显示乱码

多语言环境中,中文歌曲的歌词在中文环境下是正常显示的,而切换到其他如法语、阿拉伯语等语言时,会发生乱码的情况,修改点如下:

fileReader= new BufferedReader(new InputStreamReader(connection.getInputStream(),LyricsLocale.defLocale2CharSet()));

改为

FileInputStreamfis = new FileInputStream(lrcFile);

BufferedInputStreamin = new BufferedInputStream(fis);

in.mark(4);

byte[]first3bytes = new byte[3];

n.read(first3bytes);

in.reset();

if(first3bytes[0] == (byte) 0xEF && first3bytes[1] == (byte) 0xBB&& first3bytes[2] == (byte) 0xBF) {// utf-8

         fileReader = new BufferedReader(newInputStreamReader(new FileInputStream(lrcFile), "utf-8"));

}

elseif (first3bytes[0] == (byte) 0xFF && first3bytes[1] == (byte) 0xFE) {//unicode

         fileReader = new BufferedReader(newInputStreamReader(new FileInputStream(lrcFile), "unicode"));                                  

}

elseif (first3bytes[0] == (byte) 0xFE && first3bytes[1] == (byte) 0xFF) {//utf-16be

         fileReader = new BufferedReader(newInputStreamReader(new FileInputStream(lrcFile), "utf-16be"));                                                                      

}

elseif (first3bytes[0] == (byte) 0xFF && first3bytes[1] == (byte) 0xFF) {//utf-16le

         fileReader = new BufferedReader(newInputStreamReader(new FileInputStream(lrcFile), "utf-16le"));                                                                       

}

else{// GBK

         fileReader = new BufferedReader(newInputStreamReader(new FileInputStream(lrcFile), "GBK"));

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值