歌曲名、艺术家名显示乱码
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"));
}