批量将Java源代码文件的编码从GBK转为UTF-8

近在做一个项目,需要从以前的另外一个项目迁移大量源代码过来,但是由于另一个项目采用GBK编码格式,而新项目采用的UTF-8编码格式,如果直接把Java源代码复制到Eclipse中所有的中文信息都出现乱码。

将文本文件的编码格式从GBK转UTF-8的方式有很多,比较早以前我处理方式都是自己写程序,从文本文件中用GBK编码读取数据,转为String类型,然后通过UTF-8编码重新写入文本文件实现转码,现在经常使用 Apache Common 组件,用commons-io.jar实现文件的读取和写入,代码如下:

(commons-io 下载见:http://commons.apache.org/io/download_io.cgi

//GBK编码格式源码路径 
String srcDirPath = "D:\\dev\\GBK\\src"; 
//转为UTF-8编码格式源码路径 
String utf8DirPath = "D:\\dev\\UTF8\\src"; 
        
//获取所有java文件 
Collection<File> javaGbkFileCol =  FileUtils.listFiles(new File(srcDirPath), new String[]{"java"}, true); 
        
for (File javaGbkFile : javaGbkFileCol) { 
      //UTF8格式文件路径 
      String utf8FilePath = utf8DirPath+javaGbkFile.getAbsolutePath().substring(srcDirPath.length()); 
       //使用GBK读取数据,然后用UTF-8写入数据 
      FileUtils.writeLines(new File(utf8FilePath), "UTF-8", FileUtils.readLines(javaGbkFile, "GBK"));        
}

很简单的几行代码,就可以批量将GBK格式的java文件转为UTF-8格式。 基本上所有文本文件的编码转换都可以采用这种方式。

工程文件见:http://www.oschina.net/code/snippet_97118_11332

注意:我在项目中,遇见GBK和UTF8混合编码,如果文件本身是UTF8,而程序中以GBK的格式

读取,再转为UTF8,将出现问题,所以,最好还是先判断下文件类型。简单的方式为


按照给定的字符集存储文件时,在文件的最开头的三个字节中就有可能存储着编码信息,所以,基本的原理就是只要读出文件前三个字节,判定这些字节的值,就可以得知其编码的格式。其实,如果项目运行的平台就是中文操作系统,如果这些文本文件在项目内产生,即开发人员可以控制文本的编码格式,只要判定两种常见的编码就可以了:GBK和UTF-8。由于中文Windows默认的编码是GBK,所以一般只要判定UTF-8编码格式。
   对于UTF-8编码格式的文本文件,其前3个字节的值就是-17、-69、-65,所以,判定是否是UTF-8编码格式的代码片段如下:
          File file = new File(path);
          InputStream in= new java.io.FileInputStream(file);
          byte[] b = new byte[3];
          in.read(b);
          in.close();
          if (b[0] == -17 && b[1] == -69 && b[2] == -65)
              System.out.println(file.getName() + ":编码为UTF-8");
          else
              System.out.println(file.getName() + ":可能是GBK,也可能是其他编码");

详见:http://www.cnblogs.com/java0721/archive/2012/07/21/2602963.html

但是该方法不完善,有很多UTF-8编码的文本文件,不能用这个来判断。


注意在eclipse 中编码方式的设置:
1.window->preferences->General ->workspace 修改Text file encoding
2.window ->preferences -> General ->Content types   选中Text,将其 default encoding 设置。
项目名右键->Resources  中可查看该项目的Text file encoding 方式。


本文转自:http://my.oschina.net/binny/blog/62959

阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页