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

原创
2012/06/19 18:01
阅读数 2.4W

        最近在做一个项目,需要从以前的另外一个项目迁移大量源代码过来,但是由于另一个项目采用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\\workspace\\masdev\\mas\\src";
//转为UTF-8编码格式源码路径
String utf8DirPath = "D:\\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

展开阅读全文
打赏
7
10 收藏
分享
加载中
Binny博主

引用来自“cwjy1202”的评论

请问楼主:我在网上看到有人说UTF-8的文件InputStream fis = new FileInputStream(f2);
byte[] b = new byte3;
fis.read(b);
fis.close();

if (b0 == -17 && b1 == -69 && b2 == -65)
{
System.out.println(f2.getName() + ": 编码为UTF-8");
}
else
{
System.out.println(f2.getName() + ": 其他编码");
}

楼主的方法生成的文件,用这个方法,不能判断为UTF-8,这个能不能解释一下,困惑了 好久,谢谢!
if (b0 == -17 && b1 == -69 && b2 == -65) { System.out.println(f2.getName() + ": 编码为UTF-8"); } 实践证明,这个判断并不完善,有很多UTF-8编码的文本文件,不能用这个来判断。我个人目前还没找到完美的判断整个文本文件是否UTF-8
2014/06/12 16:48
回复
举报
请问楼主:我在网上看到有人说UTF-8的文件InputStream fis = new FileInputStream(f2);
byte[] b = new byte3;
fis.read(b);
fis.close();

if (b0 == -17 && b1 == -69 && b2 == -65)
{
System.out.println(f2.getName() + ": 编码为UTF-8");
}
else
{
System.out.println(f2.getName() + ": 其他编码");
}

楼主的方法生成的文件,用这个方法,不能判断为UTF-8,这个能不能解释一下,困惑了 好久,谢谢!
2014/06/06 10:08
回复
举报
在 CSDN 博客里找到壹篇其他人转载的你的文章,在 Google Search 中的权重居然比原创还要高。http://blog.csdn.net/jj88888/article/details/12711291
2013/10/29 10:06
回复
举报
Binny博主

引用来自“zhanghua1121”的评论

汉字标注还是烂码,为什么

你咨询检查一下 源文件 在GBK编码下是否中文显示正常? 转换后是不是用UTF-8格式打开文件的? 这代码我转换了好几个工程,都很正常。
2013/10/18 09:18
回复
举报
汉字标注还是烂码,为什么
2013/10/18 07:15
回复
举报

引用来自“Binny”的评论

引用来自“stillhere”的评论

感谢!你的代码对我很有帮助,我也是遇到了批量转换java源码的问题。
我把你的代码稍稍修改了一下,想做成个命令行工具,但我是个java新手(很新很新),发现打包好的jar可执行文件在命令行里不会输出东西、、、
本来想把当前编码转换的情况等在命令行打印出来的、、、看来还是要再研究研究了、

另外,我把基于你的代码修改过的这个命令行小工具共享到Github上面了,希望不要介意哈、、
https://github.com/stillhere/EncodeConvert

没问题, 注意一个地方,该代码没进行过性能优化文件行数太大,会导致内存溢出,如果要整理成工具,需要处理这一行代码:
FileUtils.writeLines(new File(utf8FilePath), "UTF-8", FileUtils.readLines(javaGbkFile, "GBK"));

哦,了解,谢谢你哈!
2012/09/29 10:22
回复
举报
Binny博主

引用来自“stillhere”的评论

感谢!你的代码对我很有帮助,我也是遇到了批量转换java源码的问题。
我把你的代码稍稍修改了一下,想做成个命令行工具,但我是个java新手(很新很新),发现打包好的jar可执行文件在命令行里不会输出东西、、、
本来想把当前编码转换的情况等在命令行打印出来的、、、看来还是要再研究研究了、

另外,我把基于你的代码修改过的这个命令行小工具共享到Github上面了,希望不要介意哈、、
https://github.com/stillhere/EncodeConvert

没问题, 注意一个地方,该代码没进行过性能优化文件行数太大,会导致内存溢出,如果要整理成工具,需要处理这一行代码:
FileUtils.writeLines(new File(utf8FilePath), "UTF-8", FileUtils.readLines(javaGbkFile, "GBK"));
2012/09/28 18:50
回复
举报
感谢!你的代码对我很有帮助,我也是遇到了批量转换java源码的问题。
我把你的代码稍稍修改了一下,想做成个命令行工具,但我是个java新手(很新很新),发现打包好的jar可执行文件在命令行里不会输出东西、、、
本来想把当前编码转换的情况等在命令行打印出来的、、、看来还是要再研究研究了、

另外,我把基于你的代码修改过的这个命令行小工具共享到Github上面了,希望不要介意哈、、
https://github.com/stillhere/EncodeConvert
2012/09/28 13:55
回复
举报
Binny博主

引用来自“stillhere”的评论

那是不是也能把文件从utf-8转换为GBK?

一样适用其它文本文件
2012/09/27 21:22
回复
举报
那是不是也能把文件从utf-8转换为GBK?
2012/09/27 20:55
回复
举报
更多评论
打赏
10 评论
10 收藏
7
分享
返回顶部
顶部