java 字节乱码_Android/Java 字节读取出现乱码问题
用字节流读包含中文的文件出现乱码是不可避免的,简单的想想:单第一个字为英文,第二个子为中文,而一个英文占1一个字节,一个中文占两个字节,当你用两个字节的的数组读取,中文字就会被拆分,这样就肯定会出现乱码。
给你个解决方法代码如下:
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class Start{
public static void main(String[] args){
File fileS = new File("E:/123.txt");
if(!fileS.exists()){
System.out.println ("找不到指定文件");
return;
}
FileInputStream fileIS = null;
try{
fileIS = new FileInputStream(fileS);
byte[] byt = new byte[2];
int data = fileIS.read()(byt);
for (; data != -1 ; ){
int a=byt[0];
int b=byt[1];
if((a >= 0 && a <= 127) && (b > 127 || b < 0)){
System.out.print ((char)a);
data = fileIS.read()();
byt[0] = (byte)b;
byt[1] = (byte)data;
}
String str = new String(byt);
System.out.print (str);
data = fileIS.read()(byt);
}
System.out.println ();
}catch(FileNotFoundException ex){
ex.printStackTrace();
}catch(IOException ex){
ex.printStackTrace();
}finally{
if (fileIS != null) {
try{
fileIS.close();
}catch(IOException ex){
ex.printStackTrace();
}
}
}
}
}
假如没有汉字,字节读取有时也会出现乱码,例如
写入:
try {
//用流写
FileOutputStream fileOutstr = openFileOutput("inFileTest", MODE_PRIVATE);
String nerong = "hello inFile";
fileOutstr.write(nerong.getBytes()); //写
fileOutstr.close(); //不要忘记关闭流
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
读取:
try {
FileInputStream fileInstr = openFileInput("inFileTest");
byte[] bs = new byte[100];
fileInstr.read(bs);
fileInstr.close();
//把结果打印到TextView中
t.setText(bs.toString); //结果出现乱码
//改为 //t.setText(new String(bs)); //就好
} catch (FileNotFoundException e) {
//
TODO Auto-generated catch block
e.printStackTrace();
} catch
(IOException e) {
//
TODO Auto-generated catch block
e.printStackTrace();
}
原因:
toString()的默认实现是打印对象类型+hashCode() [B表示byte数组
@表示之后的是地址 后面跟着的hashCode,其实就是其虚拟机地址.
但是使用new String()构造方法将byte[]转换为字符串得到的就会是一个根据字节数组内容构造的字符串。
java 字节乱码_Android/Java 字节读取出现乱码问题相关推荐
- java randomaccessfile 乱码_Java 8 RandomAccessFile 读取 UTF-8 乱码
问题结论 为什么 RandomAccessFile 的 readLine() 读 UTF-8 文件是乱码? RandomAccessFile 的函数 readLine() 使用 ISO-8859-1 ...
- android java 中文乱码_android读写中文如何避免乱码详解
前言 android读取文件中文出现乱码的原因无非就是,读取文件的字符格式与写如文件的格式不一致.因此,避免中文乱码,要在写入文件的时候按照一定的格式写入,读取的时候按照一定的格式读取.这样对应就不会 ...
- android 读取txt转为utf-8乱码,彻底解决android读取txt乱码终极方案
解决android读取txt乱码 一,工具类FileUtil /** * 获取文件内容 * * @param filePath * @return */ public static String ge ...
- java 字节流乱码_java用字节流读取中文乱码怎么解决?
首先,如果你明确的知道使用的编码,那么你可以在读取完毕生成字符串的时候直接指定编码. 例如: FileInputStream in = new FileInputStream("aaa.tx ...
- android java服务端_Android/Java从服务器端下载图片
/** * 思想: 1.直接将所有数据安装字节数组发送 2.对象序列化方式 *//** * thread方式 * * @author Administrator */public class Test ...
- java android 服务器_Android/Java从服务器端下载图片
/** * 思想: 1.直接将所有数据安装字节数组发送 2.对象序列化方式 *//** * thread方式 * * @author Administrator */public class Test ...
- java native内存_android java内存与native内存
09-28 17:16:37.543: DEBUG/dalvikvm(21466): GC_EXTERNAL_ALLOC freed 390 objects / 45656 bytes in 50ms ...
- android平台java编程规范_Android Java类编写规范+优化建议
本文仅是我个人在实际开发中习惯的编写方式,当然这种方式也是来自很多官方的推荐,所以在一定程度上是可以被模仿套用的.本文将不定期更新~ 零.指导原则 优先保证可读性,不要过分追求代码艺术和效率 在可读性 ...
- java mp4分割_Android(java方法)上实现mp4的分割和拼接 (二)
这节谈一下如何在android上实现mp4文件的高效率切割. 业务需求举例:把一段2分钟的mp4文件切割出00:42 至 01:16这段时间的视频,要求足够短的执行时间和尽量少的误差. 分析:mp4P ...
最新文章
- Nibiru Open Day,OZO 遇见 DigiArtist 国际数字艺术展
- 荐书 | 10 本机器学习电子书,美版 Kindle 免费读
- 《JavaScript高级程序设计》笔记:变量、作用域和内存问题(四)
- Python(Windows)下安装各种库的多种方法总结--灵活使用pip
- Spring Boot属性配置文件详解
- 服务器上flash不显示动画,win10电脑在线预览不能加载flash
- [css] 移动端的布局用过媒体查询吗?写出例子看看
- 面试中如何剔除“鱼目混珠”程序员?
- iOS导航控制器和Segues
- js 中 ! + - ~ 符号和匿名函数
- 用react native 做的一个推酷客户端
- Microsoft Dynamics AX 2012
- 10个重要的算法C语言实现源代码:拉格朗日,牛顿插值,高斯,龙贝格,牛顿迭代,牛顿-科特斯,雅克比,秦九昭,幂法,高斯塞德尔...
- ReactNative实现仿微信或者通讯录快速索引功能
- 计算机CPU四大体系架构
- python基础之字符串(七)
- validation插件
- 蘑菇街的开源IM:TeamTalk
- PyTorch深度学习-跟着小土堆学习
- 垃圾渗滤液的形成过程!