java 读取文件 乱码
来源:互联网 发布:女生可怕经历知乎 编辑:程序博客网 时间:2024/05/29 17:24
前言
我们在开发中经常会遇到java读取文件乱码的问题,也许快速的百度能解决问题,但只有掌握了内部原理,我们才算真正的“解决”掉问题。
示例:
新建一个b.txt文件,只有一个字“卡”,并保存编码格式为gbk
import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.io.InputStream;import java.io.UnsupportedEncodingException;public class TestInputStream{public static void main(String[] args){InputStream is = null;String filename = "C:\\Users\\DELL\\Desktop\\b.txt";try {is = new FileInputStream(new File(filename));byte[] buffer = new byte[30];int length = 0;while((length = is.read(buffer)) != -1){System.out.print(new String(buffer, 0, length,"gbk") );}} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}finally{if(is!=null){try {is.close();} catch (IOException e) {e.printStackTrace();}}}}}
结果,输出正常
现在我们稍微,改一下程序,将
System.out.print(new String(buffer, 0, length,"gbk") );
改为
System.out.print(new String(buffer, 0, length,"utf8") );
编译后,重新运行,我们发现乱码了
分析:
这个过程中,我们只是修改了字节流转化为字符流的编码方案。
源文件保存编码格式是gbk,我们用gbk,解码,结果正常;
源文件保存编码格式是gbk,我们用utf8,解码,结果乱码;
由此我们得出,java读取文件时,字节流转化为字符流的编码方案取决于源文件的编码方案。
扩展:
java在加载属性文件时,经常会出现乱码!不是获取字节流出的错误,而是字节流转化为字符流出的错误!所以,我们将字节流包装一层字符流,并指定源文件的解码方式就可以解决乱码问题。
总结:
1、java读取文件,获取到的二进制流是固定正确的。
2、java读取文件,字节流转化为字符流的编码方案取决于源文件的编码方案。
关于操作系统默认编码,请参考我的另外一篇博文-Dfile.encoding与Charset.defaultCharset()
0 0
- java 读取文件乱码
- java 读取文件 乱码
- java读取文件,中文乱码
- java 读取txt文件乱码
- Java读取csv文件乱码
- java读取.properties文件乱码
- java读取文件免除乱码
- Java读取文件 解决中文乱码问题
- JAVA读取文件,避免中文乱码。
- Java读取中文文件出现乱码解决方法
- Java IO读取文件中文乱码问题
- JAVA读取文件,避免中文乱码
- JAVA读取文件,避免中文乱码
- Java IO 读取文件中的乱码问题
- JAVA读取文件,避免中文乱码
- java读取文件中文乱码问题
- Java 读取xml文件中文乱码问题
- java 读取中文文件乱码问题
- int main(int argc, char* argv[])
- 如何阻止QQ右下角弹出新闻框
- 20151015笔试小结
- 转自“展望未来,总结过去10年的程序员生涯,给程序员小弟弟小妹妹们的一些总结性忠告”
- C/C++内存管理详解 堆 栈
- java 读取文件 乱码
- html及Dreamweaver学习心得
- Splay学习笔记
- ocp-420
- 一对多关系的问题求助
- IOS各版本兼容性 代码思路
- relay-log命名规则
- 关于BIOS的入口地址0xFFFF0
- ocp-421