zoukankan      html  css  js  c++  java
  • Eclipse修改编码后乱码解决

    Eclipse用了一段时间,都是用的gbk编码的,突然想要规范下,强迫症犯了,于是将在Window->Preference->Appearances->Workspace修改Text file encoding为UFT-8,一点击确认,Oh,My God!中文都乱码了,一开始想的是用记事本将文件一个一个的另存为UTF-8格式,累死了,发现工程量太大,放弃了,转战代码,下面是可实现的代码,支持批量处理(即处理一个文件夹内的所有代码),不支持文件夹下还有文件夹的情况!代码如下:

    package com.tfj.demo;
    
    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    import java.io.PrintWriter;
    
    /**
     * @function 将批量的gbk的乱码文件转换到utf8
     *           将gbk的代码放到srcDir之下,转码置destDir之下,不支持srcDir之下有目录,srcDir目录与destDir目录不能一样
     * @author Jacksile E-mail:tufujietec@foxmail.com
     * @date 2016年1月16日 下午3:02:07
     */
    public class UTF8Parser {
    
        static File srcDir = new File("E:\eclipse2\studyall\src\com\tfj\algorithm"); // 待转码的GBK格式文件夹
        static File destDir = new File("E:\eclipse\studyall\src\com\tfj\algorithm"); // 转码成UTF8的目标文件夹
    
        public static void main(String[] args) {
            // 1.判断是目录
            if (!srcDir.isDirectory()) {
                return;
            }
            // 2.遍历所有目录
            File[] fs = srcDir.listFiles();
    
            // 创建目标目录
            if (!destDir.exists()) {
                destDir.mkdirs();
            }
    
            try {
                new UTF8Parser().parse(fs);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
        /**
         * 目录就迭代遍历;文件就重编码
         */
        private void parse(File[] fs) throws IOException {
            for (File file : fs) {
                if (!file.isDirectory()) {
                    File destFile = new File(destDir, file.getName());
                    parse2UTF_8(file, destFile);
                } else {
                    parse(file.listFiles());
                }
            }
        }
    
        /** 
         */
        private void parse2UTF_8(File file, File destFile) throws IOException {
            StringBuffer msg = new StringBuffer();
            // 读写对象
            PrintWriter ps = new PrintWriter(new OutputStreamWriter(new FileOutputStream(destFile,
                    false), "utf8"));
            BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file),
                    "gbk"));
    
            // 读写动作
            String line = br.readLine();
            while (line != null) {
                msg.append(line).append("
    ");
                line = br.readLine();
            }
            ps.write(msg.toString());
            br.close();
            ps.flush();
            ps.close();
        }
    
    }

    代码中修改文件夹名,运行,从转换到的文件夹复制所有文件到原来文件夹,代码中修改文件夹名。。。反反复复这三步,发现我的文件夹也太多了,这样也会累个半死,于是只能转战转换工具,网上搜索:gbk转utf-8软件,一大堆工具,很多都是支持批量处理,打开工具,选择一个文件夹(这下可以是任意的,没有限制,上面代码还限制文件夹中不能存在文件夹),轻轻松松转换,这下,编码问题彻底解决。唯一遗憾的是这样大批量处理会导致原先是utf-8的文件出现错误,所以建议批量处理时文件夹在最大化的情况下避免存在已经是utf-8的文件,否则适当缩小文件夹包含范围。

  • 相关阅读:
    问题记录之spring-mvc.xml配置文件报错
    问题记录之用poi生成图片并插入到word时,图片中的中文显示不出来
    问题记录之每次打开vmware的时候都会跳出xftp的安装程序问题解决
    DataTable和List之间互转
    .NET[C#]中实现实体对象深拷贝(克隆/复制)的几种方法
    SQL Server表分区详解(转)
    vs2017使用GitHub插件发布项目到github
    jquery autocomplete 在IE11中出现打开网页输入框有默认值时下拉列表是已经打开的状态解决
    MVC DropDownLis 二级联动实现
    sql 查询某个表在哪些存储过程(SP)中使用到
  • 原文地址:https://www.cnblogs.com/tufujie/p/5137564.html
Copyright © 2011-2022 走看看