Java文件读取 中文乱码

简介:

1 字节流以及编码转换说明

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-8带BOM的文件会出现?这个符号,这是什么情况?

    原来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 ,如需转载请自行联系原作者

相关文章
|
编解码 Java Apache
Java中文乱码浅析及解决方案
Java中文乱码浅析及解决方案
789 0
|
Java Linux Windows
java 图片上绘制文字Graphics2D linux 中文乱码
java 图片上绘制文字Graphics2D linux 中文乱码
927 0
|
Java 容器
9:中文乱码处理-Java Web
9:中文乱码处理-Java Web
282 0
|
Java 关系型数据库 MySQL
Java中文乱码浅析及解决方案
Java中文乱码浅析及解决方案
|
存储 前端开发 Java
浅谈Java中文乱码浅析及解决方案
浅谈Java中文乱码浅析及解决方案
830 0
|
缓存 Java
java文件读取 while ((len = reader.read(buffer)) != -1){}的理解
本文解释了Java中使用`InputStreamReader`和`read(buffer)`方法循环读取文件内容的机制,强调了如何正确理解读取循环和处理读取到的数据,以及如何处理字符编码和换行符。
473 0
【应用服务 App Service】App Service 中部署Java应用中文乱码现象
【应用服务 App Service】App Service 中部署Java应用中文乱码现象
239 0
|
Java Windows
【报错】java -jar 命令启动后中文乱码
在Windows上运行jar包遇到乱码问题,包括DOS窗口日志乱码和程序数据乱码。解决方法:1) 使用`chcp 65001`命令切换控制台到UTF-8编码显示日志;2) 运行jar时指定编码,如`java -Dfile.encoding=utf-8 -jar xxx.jar`,确保数据解码正确。
4361 1
Java将指定文件/文件夹压缩成zip、rar压缩文件--解決中文乱码
Java将指定文件/文件夹压缩成zip、rar压缩文件--解決中文乱码
1335 0
|
存储 Java 数据库连接
Java中文乱码浅析解决方案
Java中文乱码浅析解决方案
498 0