中文环境中,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
通过编程来解决实际问题,虽然简单,却是生活的最大乐趣!
* #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
通过编程来解决实际问题,虽然简单,却是生活的最大乐趣!
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货