GBK编码文件转UTF-8编码使用vim

来源:互联网 发布:淘宝客服电话是五视频 编辑:程序博客网 时间:2024/05/19 23:24

最近要从Eclipse转Android Studio,以前Eclipse的默认GBK编码一直没改,也就使用下去,但转Android Studio 的默认编码是UTF-8,导入旧项目GBK编码一大堆错误,

不可能又把Android Studio默认编码改为GBK吧,毕竟UTF-8才是主流,这才狠下心把,把以前写的项目都转为UTF-8,写个java转换不是分分钟的事,


说干就干,可写了才知道,问题一大堆,

先说说装换的关键部分,用 BufferedReader 并指定为GBK编码把文件阅读进来,得到编码为GBK的字符串str,再用

            flush = str.toByteArray();            String oldData= new String(flush, "GBK");            byte[] oladflush = oldData.getBytes("UTF-8");            String newData = new String(oladflush, "UTF-8");            //byte[] newflush = newData.getBytes("UTF-8");                        saveFile(file, newData);
再以UTF-8的文件保存即可,

编码是转为UTF-8文件,中文也正确了,但代码不是缺标点就是少符号,这样的程序可不能运行,

绞尽奶汁也得不到正确的,在网上找的工具也不如意,

于是想到vim把编码转utf-8很用于Eclipse用utf-8显示时也不报错,可自动脚本咱不会啊,

又想到了java 模拟键盘输入也是不错的,

再动手,

调用 cmd 打开 vim 并指定文件


Runtime rt = Runtime.getRuntime();  Process pr = rt.exec("cmd /c gvim "+path+" ");

在vim 下更改文件编码的语句是

:set fenc = UTF-8//保存退出语句为:wq

可怎么调用呢,

其它的我不会写,

只能想到模拟键盘输入,

//模拟键盘输入流程Robot robot = new Robot();//按下robot.keyPress(keyCode);//释放robot.keyRelease(keyCode);

开始模拟键盘输入


 Robot robot = new Robot(); //创建一个robot对象           // keyPressWithShift(robot, KeyEvent.VK_COLON);            //输入冒号 :            robot.keyPress(KeyEvent.VK_SHIFT);            robot.keyPress(KeyEvent.VK_SEMICOLON);            robot.keyRelease(KeyEvent.VK_SHIFT);            robot.keyRelease(KeyEvent.VK_SEMICOLON);            robot.delay(DELAY);            keyPressString(robot, "set fenc = UTF-8");            robot.keyPress(KeyEvent.VK_ENTER);            robot.keyRelease(KeyEvent.VK_ENTER);                        robot.keyPress(KeyEvent.VK_SHIFT);            robot.keyPress(KeyEvent.VK_SEMICOLON);            robot.keyRelease(KeyEvent.VK_SHIFT);            robot.keyRelease(KeyEvent.VK_SEMICOLON);            robot.delay(DELAY);                        robot.keyPress(KeyEvent.VK_W);            robot.keyRelease(KeyEvent.VK_W);            robot.keyPress(KeyEvent.VK_Q);            robot.keyRelease(KeyEvent.VK_Q);            robot.keyPress(KeyEvent.VK_ENTER);            robot.keyRelease(KeyEvent.VK_ENTER);            robot.delay(DELAY);


至此文件编码成功在Android Studio显示。但执行慢,装换期间不能操作电脑,


最后奉上代码,


import java.awt.RenderingHints.Key;import java.awt.Robot;import java.awt.Toolkit;import java.awt.datatransfer.Clipboard;import java.awt.datatransfer.StringSelection;import java.awt.datatransfer.Transferable;import java.awt.event.KeyEvent;import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.ByteArrayOutputStream;import java.io.DataInputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStream;import java.io.OutputStreamWriter;import java.io.PrintWriter;import java.nio.charset.Charset;import java.util.concurrent.Executors;/** * 把项目的gbk编码保存为utf-8 * @author YeFeiHu * */public class EncodeFile {public static int DELAY = 200;public static void main(String[] args) {String path = "D:/androidapp/";File file = new File(path);toUtf8(file);//exeCmd(path);}// shift+ 按键public static void keyPressWithShift(Robot r, int key) {        r.keyPress(KeyEvent.VK_SHIFT);        r.keyPress(key);        r.keyRelease(key);        r.keyRelease(KeyEvent.VK_SHIFT);        r.delay(DELAY);}public static void keyPressString(Robot r, String str) { Clipboard clip = Toolkit.getDefaultToolkit().getSystemClipboard();//获取剪切板 Transferable tText = new StringSelection(str); clip.setContents(tText, null); //设置剪切板内容 keyPressWithCtrl(r, KeyEvent.VK_V);//粘贴 r.delay(DELAY);}public static void keyPressWithCtrl(Robot r, int code) {r.keyPress(KeyEvent.VK_CONTROL);r.keyPress(code);r.keyPress(code);r.keyRelease(KeyEvent.VK_CONTROL);r.delay(DELAY);}public static void exeCmd(String path) {try {  Runtime rt = Runtime.getRuntime();              Process pr = rt.exec("cmd /c gvim "+path+" "); // cmd /c calc            Thread.sleep(2000);                        Robot robot = new Robot(); //创建一个robot对象           // keyPressWithShift(robot, KeyEvent.VK_COLON);            //输入冒号 :            robot.keyPress(KeyEvent.VK_SHIFT);            robot.keyPress(KeyEvent.VK_SEMICOLON);            robot.keyRelease(KeyEvent.VK_SHIFT);            robot.keyRelease(KeyEvent.VK_SEMICOLON);            robot.delay(DELAY);            keyPressString(robot, "set fenc = UTF-8");            robot.keyPress(KeyEvent.VK_ENTER);            robot.keyRelease(KeyEvent.VK_ENTER);                        robot.keyPress(KeyEvent.VK_SHIFT);            robot.keyPress(KeyEvent.VK_SEMICOLON);            robot.keyRelease(KeyEvent.VK_SHIFT);            robot.keyRelease(KeyEvent.VK_SEMICOLON);            robot.delay(DELAY);                        robot.keyPress(KeyEvent.VK_W);            robot.keyRelease(KeyEvent.VK_W);            robot.keyPress(KeyEvent.VK_Q);            robot.keyRelease(KeyEvent.VK_Q);            robot.keyPress(KeyEvent.VK_ENTER);            robot.keyRelease(KeyEvent.VK_ENTER);            robot.delay(DELAY);                        System.out.println(path);            Thread.sleep(1500);                        BufferedReader br = new BufferedReader(new InputStreamReader(pr.getInputStream()));              String readLine = br.readLine();              while (readLine != null) {                readLine = br.readLine();                System.out.println(readLine);            }            if(br!=null){                br.close();            }            pr.destroy();            pr=null;                                     // Process pr = rt.exec("D:\\xunlei\\project.aspx");  //  //            BufferedReader input = new BufferedReader(new InputStreamReader(pr.getInputStream(), "GBK"));  //  //            String line = null;  //  //            while ((line = input.readLine()) != null) {  //                System.out.println(line);  //            }  //  //            int exitVal = pr.waitFor();  //            System.out.println(":set fenc = UTF-8        } catch (Exception e) {              System.out.println(e.toString());              e.printStackTrace();          }  }static int i = 0;public static void toUtf8(File file) {if(file == null || !file.exists() || file.isHidden()) return;if(file.isDirectory()) {File[] files = file.listFiles();if(file != null) {for(File childFile : files) {toUtf8(childFile);}}}else {//if(!file.getAbsolutePath().endsWith(".back.java")) {//try {//File saveFile = new File(file.getAbsolutePath()+".back.java");////convertFile(file,saveFile);//toReadFile(file);//} catch (Exception e) {//e.printStackTrace();//}//}String path = file.getAbsolutePath();if(path.endsWith(".java") || path.endsWith("proguard-project.txt")) {System.out.println(path+"  count = "+(++i));exeCmd(file.getAbsolutePath());}}}}



有比较好的方法,请大神指点指点,让我也学习学习,我菜鸟一个只会用这个了






0 0
原创粉丝点击