经常阅读书籍附赠代码时或者其他源码时,会遇到很多GBK编码的文本文件,比如java文件,其中的中文在其他编辑器下阅读的效果不好,
如vscode,sublime(也可用插件解决),要是直接能批量将GBK编码的文件转UTF-8该多好,于是,去网上找了相关的软件,结果很遗憾,
就是自己动手造轮子吧,才有这个小工具
- 更多相关文章见笔者博客
示例源码
package xin.val1ant;
import org.apache.commons.io.FileUtils;
import java.io.*;
import java.util.HashSet;
import java.util.Set;
/**
* 批量实现文件GBK to UTF-8
*/
public class Main {
public static void main(String[] args) {
String path = args[0];
String[] strings = path.split(",");
Set<String> types = new HashSet<String>();
for (String s : strings) {
types.add(s);
}
File directory = new File(".");
// System.out.println(directory.getAbsolutePath());
handle(directory.getAbsolutePath(),types);
}
public static void handle(String path,Set<String> types){
File[] files = new File(path).listFiles(); //获取该目录下所有文件或者目录
if (files != null){
for (File file : files) {
if (file.isDirectory()){
//如果是路径,则递归调用
handle(file.getAbsolutePath(),types);
}else {
String fileName = file.getName();
try {
String charset = getCharset(file.getAbsoluteFile());
// String charset = FileUtils
if (charset.equals("GBK") && types.contains(fileName.substring(fileName.lastIndexOf(".")+1))){
//输出过程
System.out.println(fileName+": charset encode converting........");
//如果编码为GBK 且在指定文件类型范围内
FileUtils.writeLines(new File(file.getAbsolutePath()),"UTF-8",FileUtils.readLines(file,"GBK"));
}
} catch (IOException e) {
System.out.println("获取文件编码异常");
e.printStackTrace();
}
}
}
}
}
private static String getCharset(File file) throws IOException {
BufferedInputStream bin = new BufferedInputStream( new FileInputStream(file));
int p = (bin.read() << 8) + bin.read();
String code = null;
//其中的 0xefbb、0xfffe、0xfeff、0x5c75这些都是这个文件的前面两个字节的16进制数
switch (p) {
case 0xefbb:
code = "UTF-8";
break;
case 0xfffe:
code = "Unicode";
break;
case 0xfeff:
code = "UTF-16BE";
break;
case 0x5c75:
code = "ANSI|ASCII" ;
break ;
default:
code = "GBK";
}
return code;
}
}
使用说明
-
本开源工程很简单,里面的源码可供Java程序员学习交流,由于是原始版本,也未作其他测试,可能会存在转码失败,请联系本作者修复
-
针对非程序员用户,可直接将根目录下的
convert.jar
文件复制到你需要转码的文件夹
下面 -
然后在正确配置Java环境变量的情况下,(未转为exe可执行文件,望见谅),具体配置java环境变量可自信百度,谷歌
-
执行命令格式
java -jar convert.jar 参数1,参数2
,其中参数为你需要转码的文本格式文件,参数已逗号(英文逗号)分隔 -
示例
java -jar convert.jar txt,java,md # 则会将该目录下所有的txt、java、md文件的GBK编码转成UTF-8编码
网友评论