扩展阅读
  • java命名空间java.sql类types的类成员方法: java_object定义及介绍
  • 我想学JAVA ,是买THINK IN JAVA 还是JAVA2核心技术:卷1 好???
  • java命名空间java.awt.datatransfer类dataflavor的类成员方法: imageflavor定义及介绍
  • 请问Java高手,Java的优势在那里??,Java主要适合于开发哪类应用程序
  • java命名空间java.lang.management类managementfactory的类成员方法: getcompilationmxbean定义及介绍
  • 如何将java.util.Date转化为java.sql.Date?数据库中Date类型对应于java的哪个Date呢
  • java命名空间java.lang.management接口runtimemxbean的类成员方法: getlibrarypath定义及介绍
  • 谁有电子版的《Java编程思想第二版(Thinking in java second)》和《Java2编程详解(special edition java2)》?得到给分
  • java命名空间java.lang.management接口runtimemxbean的类成员方法: getstarttime定义及介绍
  • 本人想学java,请问java程序员的待遇如何,和java主要有几个比较强的方向
  • java命名空间java.awt.datatransfer类dataflavor的类成员方法: stringflavor定义及介绍
  • 我对JAVA一窍不通,可惜别人却给我一个Java的project,要我做一个安装程序,请问哪里有JAVA INSTALLER下载,而且我要不要安装java的sdk才能完成此项任务?
  • java命名空间java.security类keystore的类成员方法: getdefaulttype定义及介绍
  • 新年第一天,让我们讨论一下未来一年JAVA的发展趋势! 个人认为,JAVA将主要朝ERP和JAVA手机方面发展!
  • java命名空间java.lang.management接口runtimemxbean的类成员方法: getclasspath定义及介绍
  • 我想学Java,但不知道Java的实用的开发工具有那些,Java主要用在哪些方面,EJB到底是什么东西??
  • java命名空间java.awt.datatransfer类dataflavor的类成员方法: javaserializedobjectmimetype定义及介绍
  • 各位学java的朋友,学java的未来是什么,你们学java都用来开发什么项目啊!来者给分!!
  • java命名空间java.awt.datatransfer类dataflavor的类成员方法: javafilelistflavor定义及介绍
  • 请问java程序中的import为什么有的用java.….*,而有的又用java.….…,有什么区别吗?
  • java命名空间java.lang.management接口runtimemxbean的类成员方法: getvmname定义及介绍
  • 简单说说Java SE、Java EE、Java ME三者之间的区别
  •  
    当前位置:  编程语言>java/jsp

    Java读写包括中文的txt文件时不同编码格式问题解决

     
        发布时间:2014-1-17  


        本文导语: Java读写包括中文的txt文件时不同编码格式问题解决 在程序中,文本文件经常用来存储标准的ASCII码文本,比如英文、加减乘除等号这些运算符号。文本文件也可能用于存储一些其他非ASCII字符,如基于GBK的简体中...

    Java读写包括中文txt文件时不同编码格式问题解决

         在程序中,文本文件经常用来存储标准的ASCII码文本,比如英文、加减乘除等号这些运算符号。文本文件也可能用于存储一些其他ASCII字符,如基于GBK的简体中文,基于GIG5的繁体中文等等。在存储这些字符时需要正确指定文件的编码格式;而在读取这些文本文件时,有时候就需要自动判定文件的编码格式。
         按照给定的字符集存储文本文件时,在文件的最开头的三个字节中就有可能存储着编码信息,所以,基本的原理就是只要读出文件三个字节,判定这些字节的值,就可以得知其编码的格式。其实,如果项目运行的平台就是中文操作系统,如果这些文本文件在项目内产生,即开发人员可以控制文本的编码格式,只要判定两种常见的编码就可以了:gbk和utf-8。由于中文windows默认的编码是gbk,所以一般只要判定utf-8编码格式。
         对于UTF-8编码格式的文本文件,其前3个字节的值就是-17、-69、-65,所以,判定是否是UTF-8编码格式的代码片段如下:

    1. java.io.file f=new java.io.file("待判定的文本文件名");  

    2. try{  

    3.  java.io.InputStream ios=new java.io.FileInputStream(f);  

    4. byte[] b=newbyte[3];  

    5.  ios.read(b);  

    6.  ios.close();  

    7. if(b[0]==-17&&b[1]==-69&&b[2]==-65)  

    8.     system.out.println(f.getname()+"编码为utf-8");  

    9. else System.out.println(f.getName()+"可能是GBK");  

    10. }catch(Exception e){  

    11.   e.printStackTrace();  

    12. }  


       问题:在用Java程序进行读写含中文的txt文件时,经常会出现读出或写入的内容会出现乱码。原因其实很简单,就是系统的编码和程序的编码采用了不同的编码格式。通常,假如自己不修改的话,windows自身采用的编码格式是gbk(而gbk和gb2312基本上是一样的编码方式),而IDEEncode不修改的话,默认是utf-8的编码,这就是为什么会出现乱码的原因。当在OS下手工创建并写入的txt文件(gbk),用程序直接去读(utf-8),就会乱码。为了避免可能的中文乱码问题,最好在文件写入和读出的时候显式指定编码格式。


    1、写文件

    publicstaticvoid writeFile(String fileName, String fileContent)  

    {    

    try

       {      

           File f = new File(fileName);      

    if (!f.exists())  

           {      

               f.createNewFile();      

           }      

           OutputStreamWriter write = new OutputStreamWriter(new FileOutputStream(f),"gbk");      

          BufferedWriter writer=new BufferedWriter(write);          

           writer.write(fileContent);      

           writer.close();    

       } catch (Exception e)  

       {      

           e.printStackTrace();    

       }  

    }  

    try


    2、读文件:

    publicstatic String readFile(String fileName)

    {

       String fileContent = "";  

    try

       {      

           File f = new File(fileName);      

    if(f.isFile()&&f.exists())  

           {      

               InputStreamReader read = new InputStreamReader(new FileInputStream(f),"gbk");      

               BufferedReader reader=new BufferedReader(read);      

               String line;      

    while ((line = reader.readLine()) != null)  

               {        

                   fileContent += line;      

               }        

               read.close();      

           }    

       } catch (Exception e)  

      {        

           e.printStackTrace();    

       }    

    return fileContent;  

    }  


    3.代码示例


    import org.apache.commons.io.fileutils;    


    String filePath="D:/test.txt";    

    String fileEncode=EncodingDetect.getJavaEncode(filePath);    

    String fileContent=FileUtils.readFileToString(new File(filePath),fileEncode);

    相关文章推荐:
  • java命名空间javax.print类docflavor的类成员方法:默认编码和平台编码定义及介绍
  • 求救:JAVA 中汉字编码怎样变成 VC 下的汉字编码?
  • 网页的编码问题!或者java的编码问题,由此引出一条解决中文问题的思路
  • 免费的Java地理编码库 JGeocoder
  • java自动根据文件内容的编码来读取避免乱码
  • 简洁实用的Java Base64编码加密异常处理类代码
  • Solaris下如何修改java虚拟机的默认编码
  • 运行java程序时出现 警告:编码 UTF8 的不可映射字符
  • java用的是unicode, c 用的哪种字符编码?
  • 请问有谁有JAVA的编码规范
  • Java是否有能够将经过quoted-printable编码的字符序列转换为原文的函数?
  • 求助:java中 xp和unix的编码问题
  • 献身java的编码员都是受虐待狂
  • 再来讨论一下JAVA中的汉字编码问题
  • 关于java编码规范
  • 请教:linux里取出mysql的数据为乱码,作了编码处理还是不行(java)
  • 请教 java 编码问题。
  • 在java里有关编码和解码的问题:比如对中文编码成BASE64或quoted-printable或者是其他的,应该用什么类什么方法?请赐教!!
  • java按指定编码写入和读取文件内容的类分享
  • 有没有这样的软件:把一个不标准格式的JAVA原代码转换为具有标准(或比较标准)编码规范的代码。
  • Java IO文件编码转换实现代码


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3