用了很多种方法,包含使用通用转换类都不行,同样的文件在其它的机器里可以正常显示并读出到TextView,在我这台机器里就乱码(我用的是windowsxp),
另外:这个代码在Application里运行是正常的。只是启动Tomcat做为WebServer,再下载到模拟器的sdcard里,从android的sdcard读出时显示不正常。
特别强调的是:这个代码在其它的机器运行是正常的,没有乱码,只是在我的机器上才出现问题!所以我估计还是是字符编码的配合问题。
我用的方法有:
1)记事本中将文件另存为,编码为utf-8;
2)使用流编码(参见后面我列出的通用类)
3)在Eclipse 中把项目和文件的编码都设置成了UTF-8。
简单的流转换我用过了,不行。后面是我收集的一个通用类,给大家参考下:究竟还用什么原因导致乱码呢?请大家帮忙!
//-----------------------------------import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;public class ConvertFileCode {
        public static BufferedReader converfile(InputStream inputStream) {
                System.out.println("ConvertFileCode--------->" + inputStream);
                BufferedInputStream bis = null;
                BufferedReader reader = null;
                try {
                        bis = new BufferedInputStream(inputStream);
                        bis.(4);
                        byte[] first3bytes = new byte[3];
                        // System.out.println("");
                        // 找到文档的前三个字节并自动判断文档类型。
                        bis.read(first3bytes);
                        bis.reset();
                        if (first3bytes[0] == (byte) 0xEF && first3bytes[1] == (byte) 0xBB
                                        && first3bytes[2] == (byte) 0xBF) {// utf-8                                reader = new BufferedReader(new InputStreamReader(bis, "utf-8"));                        } else if (first3bytes[0] == (byte) 0xFF
                                        && first3bytes[1] == (byte) 0xFE) {                                reader = new BufferedReader(new InputStreamReader(bis, "unicode"));
                        } else if (first3bytes[0] == (byte) 0xFE
                                        && first3bytes[1] == (byte) 0xFF) {                                reader = new BufferedReader(new InputStreamReader(bis, "utf-16be"));
                        } else if (first3bytes[0] == (byte) 0xFF
                                        && first3bytes[1] == (byte) 0xFF) {                                reader = new BufferedReader(new InputStreamReader(bis, "utf-16le"));
                        } else {                                reader = new BufferedReader(new InputStreamReader(bis, "GBK"));//这里强制设置成UTF-8也不行
                        }
                } catch (FileNotFoundException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                } catch (UnsupportedEncodingException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
                return reader;                 
        }
}

解决方案 »

  1.   

    logcat中显示的乱码信息
    //----------------------------------
    11-08 06:30:36.275: INFO/System.out(523): ConvertFileCode--------->java.io.FileInputStream@40559498
    11-08 
    11-08 06:30:36.475: INFO/System.out(523): LrcProcessor--->temp: "$&)+.1368;=@CEHJLORUWY\^bdfikmqsvxz}��������������������������������������������������
      

  2.   

    我怀疑还是字符编码转换的问题。
    在使用utf-8编码时,文件头出现了奇数个字节。结果导致使用字符流读出时出现乱码。
    以上都是我的假想,还没有什么成熟的解决方法!另外在lrc文件在输出的时候,乱码的前面出现了ID3的字样,是不是跟lrc文件的版本有关系?
      

  3.   

    可能原因下载到sdcard上的文件内容就是乱码。我也有同样问题。自己用adb push一个文件到卡上就是好的。怎么下载不乱码还在解决中,有知道的高手请指教。