以字节流读取文件时中文乱码解决(二)
来源:互联网 发布:js添加tr td 编辑:程序博客网 时间:2024/06/08 16:12
在上一节中说明了每次读取一个字节时乱码解决方法,这一节我将阐述每次读取多个字节乱码的解决。
问题:
中文字符占2个字节,非中文占一个字节
例如:"abc中国"
当我们以每四个字节读取文件时,此时会读到 "abc" + "中"的一半,此时就会产生乱码。
byte[] b = new btye[4];
inputStream.read(b);//出现乱码
解决方法:
1.判断当前读到的 byte数组是否乱码,参考: http://www.cnblogs.com/Nbge/archive/2013/05/22/3093041.html
2.当前byte数组存在乱码时,必定是在读取最后一个字节时读到了中文的一半,此时我们再读取一个字节,然后重新创建byte数组,这样就解决了乱码。
源码:
public void test() {byte[] b = new byte[4];int len = -1;try (InputStream is = new FileInputStream("files/test2.txt")) {while ((len = is.read(b)) != -1) {// String s = new String(new byte[] { b[len - 2], b[len - 1] });String s = new String(b, 0, len);byte[] b2 = s.getBytes("iso8859_1");// 以 iso8859_1 编码时出现乱码时 byte 值为 63if (b2[b2.length - 1] == 63) {byte[] b3 = new byte[1];is.read(b3);byte temp = b3[0];b3 = Arrays.copyOf(b, b3.length + b.length);b3[b3.length - 1] = temp;System.out.print(new String(b3, 0, b3.length));} else {System.out.print(new String(b, 0, len));}}} catch (Exception e) {e.printStackTrace();}}
0 3
- 以字节流读取文件时中文乱码解决(二)
- 以字节流读取文件时中文乱码解决
- 读取文件时出现中文乱码问题的解决
- Java读取文件 解决中文乱码问题
- 解决FileInputStream 读取文件中文乱码问题
- Java 读取properties文件中文乱码解决
- 解决python读取中文文件乱码问题
- 以字节流的形式读取文件
- Qt中文|qt5解决读取中文文件中文的乱码
- qt5解决读取中文文件中文的乱码
- Qt中文|qt5解决读取ini文件中中文乱码
- 文件读取中文乱码
- Java读取properties文件中文乱码问题的解决
- Andoird - 解决读取txt文件中文乱码问题
- Java IO 读取/写入文件 中文乱码困难解决代码
- android解决读取中文文件乱码的问题
- Java读取中文文件出现乱码解决过程
- Java读取中文文件出现乱码解决过程
- 用SwipeBackLayout实现滑动关闭当前Activity
- poj 2506 Tiling(大数+递推)
- Redis 安装
- 常量文件的写法-- UIKIT_EXTERN
- web--iPhone适配
- 以字节流读取文件时中文乱码解决(二)
- java的常量与变量
- gitlab 8.8.5分支保护和Webhooks、runners、tiggers的作用
- iOSpush到下一个页面,去掉tabBar占用页面的大小
- httpClient(Get)解析JSON
- Redis 配置
- <item> tag requires a 'drawable' attribute or child tag defining a drawab
- hdu5753Permutation Bo(排列问题)
- R语言科学计算