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
- GBK编码文件转UTF-8编码使用vim
- GBK转UTF-8编码
- Vim文件编码UTF-8
- ISO 8859(GBK) 编码文件转码到UTF-8编码文件
- 批量把文件编码由GBK转UTF-8
- Linux下Vim的编码--gbk utf-8
- Eclipse代码编码GBK转UTF-8
- gbk转utf-8 iconv 编码转换
- iOS字符串GBK编码转UTF-8
- python中utf-8转GBK编码
- PHP中文GBK编码转UTF-8
- 编码:utf-8,unicode,gbk....
- 字符编码GBK,UTF-8
- UTF-8和GBK编码
- UTF-8和GBK编码
- Java GBK,UTF-8编码
- GBK、UTF-8、Unicode 编码
- ascii gbk utf-8编码
- KVM虚拟机CPU绑定性能调优
- 关于mysql 索引自动优化机制: 索引选择性(Cardinality:索引基数)
- .net mvc 分页,pagedlist,mvcpager
- VGA timing (转)
- 工厂模式的学习笔记
- GBK编码文件转UTF-8编码使用vim
- ./configure详解
- Android中Listview分类显示数据
- Maven 整合 spring profile实现多环境自动切换
- Maven实战(五)坐标详解
- AFNetworking简单封装
- ACM中好用的SET
- oracle--PL/SQL基础语法
- Oracle Grouping、Rollup 的简单用法