在一个项目中,如果源码控制得不好,有的同事提交的源码是GBK编码,有的又是utf-8。问题就来了,在Eclipse中打开时很抓狂,无论是在哪种编码方式下,看到的源文件总有些有乱码。在这个问题背景下,试想能否做一个批量转换工具,将某个文件夹下的源文件统一转为某种编码方式呢?
通过查阅相关资料后,发现JDK自带了一个native2ascii转换工具,可以实现单个文件的转换,于是决定动手写一段批量转换的代码。废话少说,见源码:
package com.fayhong.src;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
public class StreamGobbler extends Thread {
InputStream is;
String type;
StreamGobbler(InputStream is, String type) {
this.is = is;
this.type = type;
}
public void run() {
try {
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line = null;
while ((line = br.readLine()) != null)
System.out.println(type + ">" + line);
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
}
package com.fayhong.src;
import java.io.*;
/**
* 用于文件夹下的java文件的编码自动转换,如gbk转utf-8
* @author Wen Fuqiang
* @company Fayhong Technology Co., Ltd.
* @date 2010-1-26
*/
public class EncodingConverter {
/**
* main方法入口
*
* @param args
* args[0] 给定需要转换的文件夹 args[1] 指定需要转换的编码,如utf-8等
*/
public static void main(String[] args) {
// if (args.length<2){
// System.out.println("please input path of folder and encoding name");
// System.exit(1);
// }
// else{
// ec.convertEncode(args[0], args[1]);
// }
EncodingConverter ec = new EncodingConverter();
//暂时用src_path替换args[0],encoding_name替换arg[1]
String src_path = "E:\\eclipse\\workspace\\BEER\\src\\com\\";
String encoding_name = "utf-8";
ec.convertEncode(src_path, encoding_name);
}
public void convertEncode(String sourceFloder, String encoding_name) {
File file = new File(sourceFloder);
String[] files = file.list();
for (String s : files) {
if (s.indexOf('.') == -1) { // 表明这是个子目录,回归调用此函数
convertEncode(file.getAbsolutePath() + "\\" + s, encoding_name);
} else {
if (s.endsWith("java")) { //只处理以Java结尾的文件
doConvertEncode(file.getAbsolutePath()+ "\\" + s, file.getAbsolutePath()+ "\\" + s, encoding_name);
}
}
}
}
/**
* 完成具体的编码转换工作
* @param inputFile 输入文件
* @param outputFile 输出文件
* @param encoding_name 需要转成的编码格式
*/
public void doConvertEncode(String inputFile, String outputFile, String encoding_name){
Runtime rt = Runtime.getRuntime();
String cmd[] = {"native2ascii.exe","-reverse","-encoding",encoding_name,inputFile,outputFile};
System.out.println("Execing convert command for " + inputFile + " ...");
try {
Process proc = rt.exec(cmd);
// any error message?
StreamGobbler errorGobbler = new
StreamGobbler(proc.getErrorStream(), "ERROR");
// any output?
StreamGobbler outputGobbler = new
StreamGobbler(proc.getInputStream(), "OUTPUT");
// kick them off
errorGobbler.start();
outputGobbler.start();
// any error???
int exitVal = proc.waitFor();
System.out.println("ExitValue: " + exitVal);
} catch (Throwable e) {
e.printStackTrace();
}
}
}
分享到:
相关推荐
`native2ascii图形界面工具`允许用户选择文件、预览转换结果,并进行批量转换,减少了手动操作的繁琐步骤。 4. **操作流程**:使用这个图形界面工具,用户首先需要打开工具,然后通过浏览或拖拽将待转换的文件添加...
4. 特性:作为一款易用的工具,"native2ascii-crx"可能还包括批量处理、预览转换结果、自定义输出编码等功能,以满足不同开发需求。 5. 注意事项:使用任何扩展程序都需要注意安全问题,确保从可靠的来源下载,并...
具体来说,在文件处理模式下,开发者可以轻松地对整个properties文件中的所有字符串进行批量转换,这对于大型项目的国际化资源文件管理来说尤其有用。 #### 五、使用方法示例 以文件处理模式为例,我们可以使用...
在这个上下文中,它可能是一个自动化脚本,用于批量转换文件编码。 2. `make.cmd` - 类似于`abc.bat`,可能是用于构建工程的命令脚本,可能包含编码转换的相关命令。 3. `说明文档.txt` - 这可能是关于如何执行编码...
而在中文环境下,我们通常使用的是UTF-8或其他支持中文字符集的编码方式。当需要在ASCII环境下处理中文字符时,就需要进行转换。 这个插件的作用是帮助开发者解决在Eclipse中处理中文字符时遇到的编码问题。它可能...
**解决方案**:利用脚本批量修改文件编码,例如使用`native2ascii`工具,或在Eclipse中利用Property Editor功能进行编码转换。注意,在转换后,应重新编译和测试代码,确保没有引入新的错误。 #### 五、GET请求乱码...
凯撒加密解密程序 1个目标文件 1、程序结构化,用函数分别实现 2、对文件的加密,解密输出到文件 利用随机函数抽取幸运数字 简单 EJB的真实世界模型(源代码) 15个目标文件 摘要:Java源码,初学实例,基于EJB的真实...
开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,...
- `blobedit`函数在PB11.5中默认采用Unicode编码,因此在处理ASCII或ANSI字符串时可能需要进行转换。 - 示例代码调整如下: ```pb blobedit(blob_form, 73, Char(0)) j = Len(ac_formname) m = 1 for i = 1 ...
开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,...
开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,...
开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,...
开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,...
开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,...
开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,...
开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,...
开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,...
开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,...
开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,...
开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,...