我想在android做个txt文本浏览器,要对用户放到sd卡里面的txt文件进行读取并显示在屏幕上,能打开用户用不同的编码格式保存的txt文件(Unicode,UTF-8,ASCII,GB2312,Big5...),我现在不知道android系统默认的编码格式是哪种到网上看了下好象是utf-8的,我想首先判断读取文本的编码格式,等确定了以后再把它转成系统默认的编码格式,然后通过字库表去对照,然后显示对应的字符?不知道论坛上面有没人搞过这方面的,希望大家能给个建议,包括怎么去判断一个文本文件是以什么样的编码格式保存的?还有如果判断好了该怎么去转化成系统默认的编码格式?
解决方案 »
- android-serialport-api使用问题求问
- android为什么经常调用super()函数?
- gcm经常不能用,需要用户绑定Google账号,有没有替代方案?
- 视频转换
- eclipse有类似visual studio的“书签”功能吗?
- 自定义view如何定义高度
- BREW与Android中的UI事件框架比较
- 这个是怎么实现的
- android 开发不能执行可执行文件
- 模范google io做了一个控件
- 求助Unable to start activity ComponentInfo{mars.mobile/mars.mobile.DetailActivity}
- sqlite(请问一下是哪里出错了?)
2. 根据不同的编码,去解码,然后再塞到textView里面就OK了。
String decodeType = ... //此处为读取到的编码格式
String s = new String(source, 0, source.length, decodeType); //将字节流转换为String,操作String就好。
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();
给我的感觉如果是在读取得到的中间流中对他们进行编码转化,因该是徒劳无功的,它在保存文本的时候就决定了它是属于何种格式了,如果强制转系统默认的编码格式,只能是错更离谱。不知道我的想法对不对。
这个是文本的编码格式。在读取的时候,将数据读进来,放在String里面就好了。如果一定要将强制转换为系统的编码格式,感觉有没有必要。
而且你强制转换,意味着你要新建一个文件,编码为你想要的,然后写文件。
2. 通过 String(bytes, startPosition, endPosition, decodeType), 将数据取为String类型。
3. 直接将String塞到textView里面就OK了。
我想已经现在了那功能,可必须要先转系统默认的编码保存到一个临时文件一次,然后再去取出来就可以正常显示结果了。我觉得肯定有直接的办法可以解决的。
如果你已经做好了如何判断当前txt是什么编码的操作,那么判断后,转码就好了。
不同编码格式有不同的性质,你要具体熟悉后,才能理解怎么转码。
utf-8:UNICODE转换格式,对于常用字符使用单字节,汉字等使用双字节。
GB2312(通常windows下保存的txt的编码格式):此编码完全忽略了ASCII表中 127位后面的内容,127位前面的内容保留,如果两个字节同时大于127(7F)就认为这两个字节表示一个汉字,同时像标点、字母也都重新使用两个字节 定义了一遍,这就是我们经常说的 全角,这种方案可以表示6000种文字。
GBK:人们开始扩展GB2312,规定只要一个字节大于127,这个字节和后面的字节组合起来就代表一个汉字,这种编码成为GBK,于是又增加了20000多个汉字。
这仅仅是简体中文,还有BIG5,JIS等等,如果有需要,都要具体熟悉才可以。