批处理文件设置编码 |
您所在的位置:网站首页 › start的中文 › 批处理文件设置编码 |
批处理文件的编码 耿祥义 2021-03-04 一.问题的提出 有人提出能否实现java源代码编码转换的批处理,即一次性地将若干个编码为ANSI的java源文件分别转成编码为utf-8的java源文件(用记事本打开源文件,选择另存,并将编码选择为utf-8,一个一个打开,再另存,有点麻烦)。我始终建议,除非源代码中用到GBK不支持的字符,否则选择ANSI编码保存。 如果保存java源文件时选择的编码是UTF-8,那么使用javac编译源文件时必须显式用-encoding参数,告知编译器使用怎样的编码解析、编译源文件,即-encodeing给出的值必须和源文件的编码相同(不显式使用-encodeing参数,那么默认该参数的值是GBK): C:\chapter1> javac -encoding utf-8 Hello.java ANSI编码在不同的系统中代表着不同的编码。在Windows简体中文系统下,ANSI 编码代表 GBK 编码,在Windows日文系统下,ANSI 编码代表 JIS 编码。GBK编码共收录了21003个汉字,完全兼容GB2312,支持国际标准ISO/IEC10646-1和国家标准GB13000-1中的全部中、日、韩汉字(比如,日文的片假名等),并包含了BIG5编码中的所有汉字。如果Java源文件中使用的字符没有超出GBK支持的范围,保存源文件时就将编码选择为ANSI编码(保存到磁盘空间时,源文件中的汉字占用2个字节,ASCII字符占用1个字节)。 UTF-8编码支持Unicode字符集(见第2章),如果保存源文件时选择UTF-8编码,那么存储源文件时会多占用一些磁盘空间(一个汉字需占用3个字节),UTF-8兼容GBK、BIG5、EUC-JP等多种国家的语言的编码。除非源文件中确实需要GBK以外的字符,教材中保存源文件时选择的编码均为ANSI编码。 二、问题的解决 只要将ANSI编码的Java源文件,全部读入到一个byte数组a中,并使用当前默认的编码(GBK),将a中的字符封装到String对象s中,然后再将s中的字符序列重新按用户需要的编码,比如uff-8,重新编码即可。 String s = new String (a); byte utf8[] = s.getBytes("utf-8"); 最后将数组utf8写入到文件即可,那么该文件的编码就是utf-8编码(细节见后面的ChangeToUTF8类的代码)。 三、程序源代码和运行效果 1.主类 import java.io.File; import java.util.Scanner; public class MainClass { public static void main(String args[]) { ChangeToUTF8 change = new ChangeToUTF8(); //负责把ANSI编码文件转化成UTF-8编码文件 "分别转换为编码是utf-8的Java源文件"); Scanner reader=new Scanner(System.in); String fileDir = reader.nextLine(); File javaDir = new File(fileDir); if(javaDir.isDirectory()==false){ System.exit(0) ; } FileAccept fileAccept = new FileAccept(); fileAccept.setExtendName("java"); File file[] =javaDir.listFiles(fileAccept);//返回java源文件 if(file == null){ System.exit(0) ; } File javaUTFDir = new File(fileDir+"\\utf-8"); javaUTFDir.mkdirs(); change.changFlieToUTF8(javaUTFDir,file) ;//把ANSI编码文件转化成UTF-8编码文件 } } 2.选择指定的扩展名的文件(主教材例子10.2) import java.io.FilenameFilter; import java.io.File; public class FileAccept implements FilenameFilter { private String extendName; public void setExtendName(String s) { extendName="."+s; } public boolean accept(File dir,String name) { //重写接口中的方法 return name.endsWith(extendName); } } 3.负责转换的类 import java.io.*; public class ChangeToUTF8 { //把数组file中的java源文件转换为编码是utf-8的Java源文件并保存在dir目录中 public void changFlieToUTF8(File dir,File[] file) { for(int i=0;i long length = file[i].length(); int n=-1; byte [] a = new byte[(int)length]; try{ InputStream in = new FileInputStream(file[i]); in.read(a); String s = new String (a); byte utf8[] = s.getBytes("utf-8"); in.close(); File utf8Java = new File(dir+"/"+file[i].getName()); FileOutputStream out = new FileOutputStream(utf8Java); out.write(utf8); } catch(Exception e) { } } } } |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |