博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java文件读取 中文乱码
阅读量:6488 次
发布时间:2019-06-24

本文共 1788 字,大约阅读时间需要 5 分钟。

字节流以及编码转换说明

String str = "";

byte[] b_gbk =str.getBytes("GBK");

byte[] b_utf8 =str.getBytes("UTF-8");

String s_gbk = newString(b_gbk,"GBK");

String s_utf8 = newString(b_utf8,"UTF-8");

System.out.println(s_gbk);

System.out.println(s_utf8);

 

环境:Windows系统Eclipse,源码格式是GBK,为什么写明环境,主要还是跟系统显示有关

 

1.1详细剖析

第一行代码其实暗含:str是一个GBK编码的字符串,里面的byte数组存储的编码字符串是GBK编码的。


第二行代码getBytes是什么意思呢?就是告诉系统,你把str里面的字符串内容,转换成GBK编码然后存储到b_gbk,这就会涉及到GBK编码转换成UTF-8编码,如果理解不了,可以这样子想:中字在GBK里面的编码是这样子这样子,你看看中字在UTF-8的编码是什么,告诉我。


第四行代码后面有指定编码格式,就是告诉系统,我这个String类型存储的是GBK编码的字符串,系统在显示该字符串的时候,知道其编码格式,采用GBK来解码显示。

 

问题1

java读取utf-8编码文件,出现中文乱码,最大可能的原因是什么?读取GBK编码文件,是正常的!

     上面已经提到过String变量是有编码的格式要求的,默认情况下,读取文件的时候会根据系统的默认编码来读取,这种情况下,肯定就是乱码了,因为读取进去的就是,赋值给String就是GBK编码。

 

问题2

utf-8BOM的文件会出现?这个符号,这是什么情况?

    原来BOM在文件中也是一种字符存在,因为没有对应的编码输出,所以只能够显示这种符号了。所以在应用中不要选择这种编码方式就可以了。

 

2 UTF-8或者GBK文本的读取

有了上面的基础,就可以读取文本了。构建一个UTF-8的中文文档

    public static void method()

    {

        try {

            File  file = new File("d:fengyuzaitu.txt");

            byte buffer[] = newbyte[20];

            FileInputStreamf ileinput = new FileInputStream(file);

            fileinput.read(buffer);

            Strings = new String(buffer, "UTF-8");    

            System.out.println(s);

            fileinput.close();         

        }catch(IOException e) {

            e.printStackTrace();

        }

    }

   

    public static void method1()

    {

        try {

            FileInputStream fileinput = new FileInputStream("d:fengyuzaitu.txt");

            InputStreamReader isr = new InputStreamReader(fileinput, "UTF-8");

            BufferedReader br = new BufferedReader(isr);

            Stringtest = "";

            test = br.readLine();

            System.out.println(test);  

            br.close();

        }catch(IOException e) {

            e.printStackTrace();

        }

    }

 

这里进行详细描述:

方法1:直接读取字节流,然后指定String的编码类型,也就是字节流当前的编码类型

方法2:指定读取文本采用的编码格式,返回的String实际上就是经过第一种方法的包装之后返回的。

 

温馨提示:读取sqlite数据库的时候,如果将GBK字节流存储进去,读取出来的时候采用getBytes,读取字节流,然后按照上面的方法进行转换。

     本文转自fengyuzaitu 51CTO博客,原文链接:http://blog.51cto.com/fengyuzaitu/1581528
,如需转载请自行联系原作者
你可能感兴趣的文章
git 使用说明
查看>>
Facebook开始测试一个名为M的人工智能助手
查看>>
大数据学习方向
查看>>
完整的大数据学习体系
查看>>
Linux shell function
查看>>
APP推广新机遇在哪里?
查看>>
如何优雅的设计和使用缓存?
查看>>
刚出炉的一套大厂面试题(JAVA岗)
查看>>
云计算的“云”,除了公有云、私有云和混合云,云计算还有这些细分领域
查看>>
成功的经验可以复制|一位普普通通的设计师将400变成了1亿!
查看>>
登录界面更换验证码图片
查看>>
0003-如何在CDH中使用LZO压缩
查看>>
linux-shell编程6:sed练习
查看>>
使用Jquery From插件实现异步上传文件的功能
查看>>
互联网公司logo logo制作
查看>>
一台WAF价格大约是多少?想买WAF的先来了解下。
查看>>
滚涂机——有哪些分类以及特点
查看>>
加一度教你如何做好百度竞价数据分析
查看>>
C语言之printf函数
查看>>
区块链将会取代支付宝?区块链支付有什么原理?
查看>>