BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(packageFilePath)));
当使用此Reader读取GBK编码的文件时,所有的中文都会乱码,因为Reader会将读取到的byte转换成char,如果没有指定转换编码,那么Android默认是使用的utf8,那么读取到的内容就会错误。
那么假如读取完毕后进行一次转码是否可以解决乱码问题呢?
比如:
String s = readline();
s = new String(s.getBytes("gbk"), "gbk");
思路是获得字符串的gbk编码,按照gbk编码重新解析一遍,实验证明是不可以的,是什么原因呢?
举例说明:
byte ge[] = {(byte)0xb8, (byte)0xf6};
这是汉字‘个’的gbk编码。
String s = new String(ge, "gbk");
此时s不会是乱码。
s.getBytes("utf8") //得到-28,-72,-86。‘个’的utf8编码
s.getBytes("gbk") //得到0xb8,0xf6。‘个’的gbk编码
而如果用一下代码生成s:
String s = new String(ge, "utf8");
此时s已经是乱码。
s.getBytes("utf8") //得到-17,-65,-67,-17,-65,-67
此时s的内容已经完全乱掉了,所以再用
s.getBytes("gbk");
得到的数据也是乱的,无法逆向出真正的内容来。
所以要解决这个问题只能是让reader将byte转向char时使用正确的编码,即生成Reader时指定编码,即:
BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(packageFilePath), "gbk"));
分享到:
相关推荐
本文实例讲述了Android读取本地json文件的方法。分享给大家供大家参考,具体如下: 1、读取本地JSON ,但是显示汉字乱码 public static String readLocalJson(Context context, String fileName){ String json...
如果不指定字符集编码,该解码过程将使用平台默认的字符编码,如:GBK。 * * 构造方法: * * InputStreamReader isr = new InputStreamReader(InputStream * in);//构造一个默认编码集的InputStreamReader类 ...
java读取txt文本中如含有中文,可能会出现乱码,解决方案是: 1.要统一编码,java工程的编码,txt文本编码,java工程中的java文本编码都统一为utf-8; 2.利用 InputStreamReader(new FileInputStream(fileUrl), ...
Java代码 // BufferedReader in = null; // BufferedWriter out = null;... Reader in = null;... // in = new BufferedReader(new InputStreamReader(new FileInputStream(sr
//构造一个BufferedReader类来读取文件 String s; while ((s = br.readLine()) != null) {//使用readLine方法,一次读一行 wordList.add(s.trim()); } } catch (Exception e) { Logger.getLogger(FileUtil....
以字节为单位读取文件、以字符为单位读取文件、以行为单位读取文件、随机读取文件内容、显示输入流中还剩的字节数、追加文件 FileInputStream、AppendToFile、 RandomAccessFile 、InputStreamReader
读取BZip2文件的jar包 new InputStreamReader(new BZip2CompressorInputStream(new BufferedInputStream(new FileInputStream(file)),true));
1. 编写程序,使用两个线程,一个队列, 其中一个线程从键盘读取数据,放入到...要求:(a) 必须使用System.in,InputStreamReader, BufferedReader,Thread, (b) 必须使用java.util.concurrent.LinkedBlockingQueue.
1. Android中文件读写的原理: (1).所有文件的储存都是字节的储存。 (2).在磁盘上保留的并不是文件的字符而是先把字符编码成字节,再储存这些字节到磁盘。 (3).在读取文件(特别是文本文件)时,也是一个字节一个...
* InputStreamReader:将字节输入流包装一下,让其更适合读取文本文件 * 构造方法: * 1.InputStreamReader(InputStream in) 创建一个使用默认字符集的InputStreamReader。 * 2.InputStreamReader...
* 功能:Java读取txt文件的内容 * 步骤:1:先获得文件句柄 * 2:获得文件句柄当做是输入一个字节码流,需要对这个输入流进行读取 * 3:读取到输入流后,需要读取生成字节流 * 4:一行一行的输出。readline...
* 读取文件并返回为给定字符集的字符串. * @param fileName * @param encoding * @return * @throws Exception */ public static String readFileAsString(String fileName, String encoding) throws ...
Java字符编码基础 Java字符编码是处理文本信息的基础,它规定了...Java提供了丰富的API用于字符编码的处理,如Charset类可以获取系统默认的字符编码,InputStreamReader和OutputStreamWriter可以进行字符编码的转换。
java调用io流,InputStreamReader,BufferReader读取文件
主要介绍了InputStreamReader和BufferedReader用法及实例讲解的相关资料,需要的朋友可以参考下
当你还是一个java初学者的时候,是不是还在为你没有一个好的源代码模仿去学习而烦恼,这个代码很容易看懂,对你学习很有帮助
通过程序生成properties文件的工具类,并可根据添加顺序生成,可添加注释,调用步骤如下: 1.OutputOrderProperties p = new OutputOrderProperties(); 2.FileInputStream fs = new FileInputStream("文件路径"); 3....
File类保存文件或目录的各种元数据信息,包括文件名、文件长度、最后修改时间、是否可读、获取当前文件的路径名,判断指定文件是否存在、获得当前目录中的文件列表,创建、删除文件和目录等方法。 9....
本文通过示例代码给大家解析了Java中的InputStreamReader和OutputStreamWriter知识,需要的的朋友参考下吧
* 面向字符会产生乱码问题, 此时需要采用 InputStreamReader去改写字符 * 为了不造成问题的复杂, 这里不做研究, 采用系统默认编码[GB2312], 仅仅写了一个处理乱码的函数 * getStringFromFile(String filePath, ...