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"));

更多相关文章

  1. Android中跨包访问Preferences
  2. Android开源之仿微信UI
  3. Android读取/dev/graphics/fb0 屏幕截图
  4. android String.xlm中使用emoji表情的方法
  5. Android(安卓)Studio中读取文本文件内容方法
  6. 清理/data/data目录下的本地文件
  7. 如何在Android设备上识别读取美国驾照信息
  8. Android内存问题的几种解决方案(二)
  9. Android2.1读取进程流量

随机推荐

  1. android 自定义水平的ProgressBar
  2. android 程序崩溃后重启
  3. Android(安卓)Dialog在底部显示且宽度mat
  4. 菜鸟对使用AIDL的一点理解
  5. android Contacts应用中不容易理解的点
  6. Android(安卓)学习笔记-2010年10月
  7. android通知栏Notification用法
  8. Android笔记 SystemUI
  9. Android(安卓)简单模仿AsyncHttpClient
  10. android 数据库操作