以字节流读取文件时中文乱码解决(二)

来源:互联网 发布: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
原创粉丝点击