我想在android做个txt文本浏览器,要对用户放到sd卡里面的txt文件进行读取并显示在屏幕上,能打开用户用不同的编码格式保存的txt文件(Unicode,UTF-8,ASCII,GB2312,Big5...),我现在不知道android系统默认的编码格式是哪种到网上看了下好象是utf-8的,我想首先判断读取文本的编码格式,等确定了以后再把它转成系统默认的编码格式,然后通过字库表去对照,然后显示对应的字符?不知道论坛上面有没人搞过这方面的,希望大家能给个建议,包括怎么去判断一个文本文件是以什么样的编码格式保存的?还有如果判断好了该怎么去转化成系统默认的编码格式?

解决方案 »

  1.   

    SD卡下txt文件不一定就是系统默认的编码格式。
      

  2.   

    建议楼主按照以下步骤来:1. 读取文件的头,会包含编码信息。GBK, BIG5文件可能没有头。
    2. 根据不同的编码,去解码,然后再塞到textView里面就OK了。
      

  3.   

    我已经解决了来判断文本文件是什么类型的,现在已经搞定了在android下面试了可以用,就是差从文本中得到字节流然后对它转码去系统默认的编码了,怎么转系统的默认格式。
      

  4.   

    byte [] source = ...   //此处为读取到的字节流
    String decodeType = ...  //此处为读取到的编码格式
    String s = new String(source, 0, source.length, decodeType);  //将字节流转换为String,操作String就好。
      

  5.   

    decodeType这个编码格式是系统的还是得到的文本编码格式?
      

  6.   

    我做了个实验我把xp上面的一个新建文本除UTF-8编码格式保存可以在android上面正确显示中文以外,其他几种格式都不能正常显示。在xp下面运行小例子的时候除ANSI这个格式读取并可以用println正确显示外其他的几种格式都会不正常显示。这是我的测试代码:
     String encoding = getCharSet(path);//得到输入的文本文件保存的编码类型。
     File file  = new File(path);
     InputStreamReader input = new InputStreamReader(new FileInputStream(file),encoding);
     BufferedReader reader = new BufferedReader(input);
     String empString = null;
    while((empString = reader.readLine()) != null){
    //empString = new String(empString.getBytes("UTF-8"),"UTF-8");
     System.out.println(empString);
    }
    reader.close();
    给我的感觉如果是在读取得到的中间流中对他们进行编码转化,因该是徒劳无功的,它在保存文本的时候就决定了它是属于何种格式了,如果强制转系统默认的编码格式,只能是错更离谱。不知道我的想法对不对。
      

  7.   


    这个是文本的编码格式。在读取的时候,将数据读进来,放在String里面就好了。如果一定要将强制转换为系统的编码格式,感觉有没有必要。
    而且你强制转换,意味着你要新建一个文件,编码为你想要的,然后写文件。
      

  8.   

    我没有写我是直接在android里面将从sdcard读取的字符串用canvas.drawTxt(string ,x,y,paint);来画到屏幕上面的。有没有这方面的开源程序,我想去研究下。看他们是怎么去实现的。
      

  9.   

    我明白你的意思了,我做的时候。1. 读取文件信息,比如说头,长度,读入到byte array中。
    2. 通过 String(bytes, startPosition, endPosition, decodeType), 将数据取为String类型。
    3. 直接将String塞到textView里面就OK了。
      

  10.   

    你做了去读取保存不同的.txt的编码格式再去读取看看
    我想已经现在了那功能,可必须要先转系统默认的编码保存到一个临时文件一次,然后再去取出来就可以正常显示结果了。我觉得肯定有直接的办法可以解决的。
      

  11.   

    默认的不是UTF-8就是GB2312 你在读去的时候首先应该按照源文件里面的文档编码格式读取,然后再用你自己想用的编码格式编码显示出来。这样做应该就会对了。
      

  12.   

    我之前是用那方法 去实现的,可后来在转换到系统默认的utf-8的时候显示老是不正常。所以我才想再写入一个系统的临时文件之后再去读取出来才没乱码的。可这样很麻烦而且感觉一点也不好系统开销太大。
      

  13.   

    GOOD GOOD STUDY, DAY DAY UP.
      

  14.   

    想要无乱码显示文本必须转成utf-8
    如果你已经做好了如何判断当前txt是什么编码的操作,那么判断后,转码就好了。
    不同编码格式有不同的性质,你要具体熟悉后,才能理解怎么转码。
    utf-8:UNICODE转换格式,对于常用字符使用单字节,汉字等使用双字节。
    GB2312(通常windows下保存的txt的编码格式):此编码完全忽略了ASCII表中 127位后面的内容,127位前面的内容保留,如果两个字节同时大于127(7F)就认为这两个字节表示一个汉字,同时像标点、字母也都重新使用两个字节 定义了一遍,这就是我们经常说的 全角,这种方案可以表示6000种文字。
    GBK:人们开始扩展GB2312,规定只要一个字节大于127,这个字节和后面的字节组合起来就代表一个汉字,这种编码成为GBK,于是又增加了20000多个汉字。
    这仅仅是简体中文,还有BIG5,JIS等等,如果有需要,都要具体熟悉才可以。
      

  15.   

    new String()有转换编码的方法 查下API应该可以看到的
      

  16.   

    在寻找能够阅读doc文档的源代码,或者思路。
      

  17.   

    楼主试试 cpdetector_1.0.8.jar 这个jar包 我以前就是用它来做的