本文共 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-8fileReader = new BufferedReader(newInputStreamReader(new FileInputStream(lrcFile), "utf-8"));
}
elseif (first3bytes[0] == (byte) 0xFF && first3bytes[1] == (byte) 0xFE) {
//unicodefileReader = new BufferedReader(newInputStreamReader(new FileInputStream(lrcFile), "unicode"));
}
elseif (first3bytes[0] == (byte) 0xFE && first3bytes[1] == (byte) 0xFF) {
//utf-16befileReader = new BufferedReader(newInputStreamReader(new FileInputStream(lrcFile), "utf-16be"));
}
elseif (first3bytes[0] == (byte) 0xFF && first3bytes[1] == (byte) 0xFF) {
//utf-16lefileReader = new BufferedReader(newInputStreamReader(new FileInputStream(lrcFile), "utf-16le"));
}
else{
// GBKfileReader = new BufferedReader(newInputStreamReader(new FileInputStream(lrcFile), "GBK"));
}
转载地址:http://vavti.baihongyu.com/