原因一:将txt文件的内容转为IO流 与 byte[] 转 String 所用的编码不一致(byte[]:用于存读取的数据)。

原因二 : 字节流是以字节单位读取的,假设用一个 byte bytes[] = new byte[11];去接收文本里面有4个汉字的txt文档的IO流。

此时假设编码格式为UTF-8,UTF-8存储一个汉字需要3个字节。也就是说bytes.length>=3*4 才能一次性接收,但我现在bytes数组开辟的空间是11,也就是说需要接收2次。这时候问题就产生了,一个汉字是3个字节,最后一个字的3个字节被拆成了两部分,当你打印的时候,结果显然会出问题。


原因一 解决方式:打开txt文档 点另存为,对话框最下面 可以看到该txt的编码格式字节IO流读取txt文件乱码问题

如我的这个是ANSI(GBK),这个编码格式决定了 txt文本中的内容 转 IO 流的 编码格式。 这个格式必须跟你 .java 文件设置的编码格式一样,否则就会产生乱码。

原因一  代码演示

下面程序 演示  , 我的a.txt 是ANSI(GBK)编码,b.txt是UTF-8编码。两个txt文本内容"测试数据"  该 .java 文件是 GBK编码。   

字节IO流读取txt文件乱码问题

字节IO流读取txt文件乱码问题

原因二 解决方式 : 就是尽量别用 字节io流 去 传 带中文的 txt 文本。用字符流传。

原因二 导致的乱码  演示     

字节IO流读取txt文件乱码问题字节IO流读取txt文件乱码问题


相关文章: