中文环境中,Windows默认编码为gb2312,而Linux为utf-8,这你以来,当编程环境从windows转到linux时,所有源文件中的中文注释都会变为乱码。前几天,我就遇到了这种情况,但被我给解决了,现在我希望与遇到同样问题的朋友们分享一下。我是自己用java编程与bash编程的方式来实现,程序代码如下:GB2UTF8.java 接收两个参数:其中一个为需要进行转换的文件名,另一个为转后的目标文件名。/*
* #GB2UTF8.java
* 2009-05-19
*
* 以前的java编程是在windows下进行的,现在我将其转到linux平台下,但由于
* windows对文本编码方式为gb2312,而linux为utf-8,这样以来以前好多源码文件都变成了乱码。
* 这个程序就是为了解决linux下的乱码写的。
* 这个程序配合bash就可以轻松解决我的乱码问题,欧也。
*/
package com.gehaiming.tools;import java.io.*;public class GB2UTF8{
public static void main(String[] args)throws Exception{
   if(args.length!=2){
    System.err.println("args err!");
    System.exit(1);
   }
   //gb2utf8
   gb2utf8(args[0],args[1]);
}
/**
* 将以gb2312编码的filename1所表示的文件转换为以本地编码(utf-8)的filename2所表示的文件
* @param filename1 gb2312编码的文件,即源文件
* @param filename2 utf-8编码的文件,即目标文件
*/
public static void gb2utf8(String filename1,String filename2)throws Exception{
   //将原本的乱码文件转换为可以正常显示的字符串
   BufferedInputStream is=new BufferedInputStream(new FileInputStream(filename1));
   String str=null;
   int bytesAvailable=is.available();
   if(bytesAvailable>0){
    byte[] data=new byte[bytesAvailable];
    is.read(data);
    str=new String(data,"gb2312");
   }
   //字符串写入另一个文件
   /*如果目标文件所在目录不存在,则创建*/
   int index=-1;
   index=filename2.lastIndexOf("/");
   if(index!=-1){
    String dirName=filename2.substring(0,index);
    File dir=new File(dirName);
    if(!dir.exists()){
     dir.mkdirs();
    }
   }
   File file2=new File(filename2);
   BufferedWriter writer=new BufferedWriter(new FileWriter(file2));
   writer.write(str,0,str.length()); 
   writer.flush();
   writer.close();
   //关闭输入流
   is.close();
}
}
gb2utf8 (bash脚本文件),接受的参数为若干个目录,脚本通过调用java程序,从而实现到这几个目录下的文件实现转换。for dir in $@
do
#通过改变$dir后面内容,来进行转换特定的类型的文件
for filename in $dir/*.txt
do
   echo $filename
   java -cp ~/j-workspace/bin com.gehaiming.tools.GB2UTF8 $filename $filename
done
done

通过编程来解决实际问题,虽然简单,却是生活的最大乐趣!