基于JChardet自动检测文件编码,批量转换文件编码,解决乱码问题

原文:http://blog.csdn.net/tuesday22/article/details/6608350

 

原项目现已删除.

有需要的请访问http://code.google.com/p/file-convert/,

我根据juniversalchardet(感觉准确率高一点)写了一个带图形界

面的编码转换工具[ file-convert ]放在googlecode.

附带源码,Util包具有较好重用性:


软件说明:

    • 可以自动侦测文件类型(mime-util)
    • 文件编码(juniversalchardet)
    • 支持文件名过滤
    • 支持指定目录转换,还有单文件转换
    • Native2Ascii转换


注意! 本次用的侦测库准确率虽然较高,但不能确保100%,采用自动转换前,请先备份!


注意! 编码侦测识别率不是100%,测试时,偶尔有误识别情况,转换前请先备份目录.

1.支持指定文件类型的转码


2.自动侦测文件原编码,基于juniversalchardet-1.0.3.jar


3.自动识别文件类型,基于  mime-util-2.1.3.jar


4.native2ascii 基于http://soulshard.iteye.com/blog/346807

soulshard的源码


5.支持指定目录批量操作


6.swing界面


问题反馈邮箱:chenjiajia_1@126.com

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用Java的IO流和编码转换器来实现将整个目录下的gbk编码文件转换成utf-8编码文件。具体实现步骤如下: 1. 遍历目录下的所有文件,可以使用File类的listFiles()方法实现。 2. 对于每个文件,判断其编码格式,可以使用ICU4J或JCharDet等第三方库来判断编码格式。 3. 如果编码格式为gbk,则使用Java的IO流读取文件内容,然后使用编码转换器将其转换成utf-8编码格式,最后使用IO流写入到新的文件中。 4. 如果编码格式不为gbk,则直接使用IO流将文件内容读取并写入到新的文件中。 5. 最后关闭IO流和文件。 下面是Java代码示例: ```java import java.io.*; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; public class ConvertGBKToUTF8 { public static void main(String[] args) { String srcDir = "srcDir"; // 源目录 String destDir = "destDir"; // 目标目录 convert(srcDir, destDir); } public static void convert(String srcDir, String destDir) { File srcFile = new File(srcDir); if (!srcFile.exists()) { System.out.println("源目录不存在!"); return; } File[] files = srcFile.listFiles(); for (File file : files) { if (file.isDirectory()) { convert(file.getAbsolutePath(), destDir + File.separator + file.getName()); } else { String charset = getCharset(file); if (charset.equalsIgnoreCase("GBK")) { convertFile(file, destDir, charset); } else { copyFile(file, destDir); } } } } public static String getCharset(File file) { String charset = "UTF-8"; try (FileInputStream fis = new FileInputStream(file)) { byte[] buffer = new byte[4096]; UniversalDetector detector = new UniversalDetector(null); int nread; while ((nread = fis.read(buffer)) > 0 && !detector.isDone()) { detector.handleData(buffer, 0, nread); } detector.dataEnd(); charset = detector.getDetectedCharset(); if (charset == null) { charset = "UTF-8"; } detector.reset(); } catch (IOException e) { e.printStackTrace(); } return charset; } public static void convertFile(File file, String destDir, String charset) { try (BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file), charset)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(destDir + File.separator + file.getName()), StandardCharsets.UTF_8))) { String line; while ((line = br.readLine()) != null) { bw.write(line); bw.newLine(); } } catch (IOException e) { e.printStackTrace(); } } public static void copyFile(File file, String destDir) { try (FileInputStream fis = new FileInputStream(file); FileOutputStream fos = new FileOutputStream(destDir + File.separator + file.getName())) { byte[] buffer = new byte[4096]; int nread; while ((nread = fis.read(buffer)) > 0) { fos.write(buffer, 0, nread); } } catch (IOException e) { e.printStackTrace(); } } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值