博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
歌曲名、艺术家名显示乱码
阅读量:4150 次
发布时间:2019-05-25

本文共 2607 字,大约阅读时间需要 8 分钟。

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

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"));

}

转载地址:http://vavti.baihongyu.com/

你可能感兴趣的文章
作为移动开发程序员,2021年Android开发者跳槽指南,实战篇
查看>>
你了解过移动端适配吗?文末领取面试资料
查看>>
你有过迷茫吗?完整版开放下载
查看>>
全套学习!2021最新Android大厂面试真题大全,已拿到offer
查看>>
全靠这份Android知识点PDF大全,详细的Android学习指南
查看>>
看完不会的来打我!想给金三银四找工作的程序员几点建议,社招面试心得
查看>>
真的已经讲烂了!34岁安卓开发大叔感慨,全网最新
查看>>
真的已经讲烂了!靠着这份面试题跟答案,学习路线+知识点梳理
查看>>
Gradle源码全解析,威力加强版
查看>>
HTTPS面试常问全解析,文末领取面试资料
查看>>
kotlin入门,闭关在家37天“吃透”这份345页PDF,完整PDF
查看>>
kotlin协程原理,免费Android高级工程师学习资源,威力加强版
查看>>
kotlin面试题!一口气拿了9家公司的offer,已拿offer入职
查看>>
深入解析android核心组件和应用框架,Android面试题及解析
查看>>
温故而知新!微信小程序的事件处理,吊打面试官系列!
查看>>
灵魂拷问!Android性能优化之APK优化,系列篇
查看>>
焦虑的移动互联网开发者如何破局?BAT大厂面试总结
查看>>
爆赞!Android岗大厂面试官常问的那些问题,论程序员成长的正确姿势
查看>>
爆赞!Android岗大厂面试官常问的那些问题,论程序员成长的正确姿势
查看>>
爱了爱了!Android平台HTTPS抓包解决方案及问题分析,面试必问
查看>>