今天想把两个工程合并,但发现一个是GBK格式,一个是UTF-8格式的,合并后出现乱码。
霎时间感到蛋极为不舒服。。。。。
由于文件数量很多,懒得手动一个一个去把代码复制粘贴,所以写了这个文件格式互转的代码(见下方代码)。。。
大家如果以后用得上就留着吧。
功能:将单文件或者整个文件目录树下的文件进行GBK与UTF-8的互转。
(ps:1,目录树下SVN的".svn"目录我是直接复制过去的,没有转换。。。但没能把它设置成隐藏的比较蛋疼。
2,svn文件略过功能如果不需要,可以自行删除对应代码。
3.实例参考main函数。
4,deleteFile和copyFile这两个函数是从自己以前的代码复制过来,寥寥修改了一下,代码有些冗余
5,如想扩展其他格式转换,可以修改两个private的转换函数)
import java.io.BufferedReader;
import java.io.DataInputStream;
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.Writer;
/**
* 文件或者文件夹目录下文件的类型转换:UTF-8与GBK 互转
* @author weidong
*
*/
public class FormatInterchange {
/**
* 将UTF-8格式的source文件或者此路径下的所有子文件转换成GBK格式,并存放到destination路径下<br>
* (若是文件夹,树形结构保持不变)<br>
* (SVN的.svn目录则直接复制,不转换)
*
* @param source
* 需要转换的UTF-8文件或者文件夹(文件夹下所有文件需都是UTF-8格式)
* @param destination
* 转换成的GBK文件存放的路径(无需包含文件名,此函数将按照原有的文件名生成对应文件)
* @return true 转换成功; false 转换失败
*/
public boolean transfer_UTF8_To_GBK(String source, String destination) {
File src = new File(source);
if (!src.exists()) {
System.out.println("文件源: " + source + " 不存在!");
return false;
}
// 单个文件,则直接转换
if (src.isFile()) {
if (!destination.endsWith(File.separator))
destination += File.separator;
File dest = new File(destination);
if (!dest.exists()){
dest.mkdirs();
}
try {
this.transfer_UTF8_to_GBK(source, destination + src.getName());
return true;
} catch (IOException e) {
e.printStackTrace();
return false;
}
} else {// 如果是目录,则按照原来树形结构迭代进行转换和保存
File[] files = src.listFiles();
if (files == null) {
System.out.println("文件源: " + source + " 下没有文件!");
return false;
}
for (File temp : files) {
if (!destination.endsWith(File.separator))
destination += File.separator;
if(temp.getName().equals(".svn")){
this.copyFile(temp.getAbsolutePath(), destination
+ temp.getParentFile().getName());
continue;
}
this.transfer_UTF8_To_GBK(temp.getAbsolutePath(), destination
+ temp.getParentFile().getName());
}
}
return true;
}
/**
* 将GBK格式的source文件或者此路径下的所有子文件转换成UTF-8格式,并存放到destination路径下<br>
* (若是文件夹,树形结构保持不变)<br>
* (SVN的.svn目录则直接复制,不转换)
*
* @param source
* 需要转换的GBK文件或者文件夹(文件夹下所有文件需都是GBK格式)
* @param destination
* 转换成的UTF-8文件存放的路径(无需包含文件名,此函数将按照原有的文件名生成对应文件)
* @return true 转换成功; false 转换失败
*/
public boolean transfer_GBK_To_UTF8(String source, String destination) {
File src = new File(source);
if (!src.exists()) {
System.out.println("文件源: " + source + " 不存在!");
return false;
}
// 单个文件,则直接转换
if (src.isFile()) {
if (!destination.endsWith(File.separator))
destination += File.separator;
File dest = new File(destination);
if (!dest.exists()){
dest.mkdirs();
}
try {
this.transfer_GBK_to_UTF8(source, destination + src.getName());
return true;
} catch (IOException e) {
e.printStackTrace();
return false;
}
} else {// 如果是目录,则按照原来树形结构迭代进行转换和保存
File[] files = src.listFiles();
if (files == null) {
System.out.println("文件源: " + source + " 下没有文件!");
return false;
}
for (File temp : files) {
if (!destination.endsWith(File.separator))
destination += File.separator;
if(temp.getName().equals(".svn")){
this.copyFile(temp.getAbsolutePath(), destination
+ temp.getParentFile().getName());
continue;
}
this.transfer_GBK_To_UTF8(temp.getAbsolutePath(), destination
+ temp.getParentFile().getName());
}
}
return true;
}
/**
* 转换格式:GBK to UTF-8
*
* @param srcFileName
* 需要转换的GBK文件路径位置
* @param destFileName
* 转换成的UTF-8文件存放的路径位置
* @throws IOException
*/
private void transfer_GBK_to_UTF8(String srcFileName, String destFileName)
throws IOException {
String lineSeparator = System.getProperty("line.separator");
FileInputStream fis = new FileInputStream(srcFileName);
StringBuffer content = new StringBuffer();
DataInputStream in = new DataInputStream(fis);
BufferedReader d = new BufferedReader(new InputStreamReader(in, "GBK"));
String line = null;
while ((line = d.readLine()) != null) {
content.append(line + lineSeparator);
}
d.close();
in.close();
fis.close();
Writer ow = new OutputStreamWriter(new FileOutputStream(destFileName),
"utf-8");
ow.write(content.toString());
ow.close();
}
/**
* 转换格式:UTF-8 to GBK
*
* @param srcFileName
* 需要转换的UTF-8文件路径位置
* @param destFileName
* 转换成的GBK文件存放的路径位置
* @throws IOException
*/
private void transfer_UTF8_to_GBK(String srcFileName, String destFileName)
throws IOException {
String lineSeparator = System.getProperty("line.separator");
FileInputStream fis = new FileInputStream(srcFileName);
StringBuffer content = new StringBuffer();
DataInputStream in = new DataInputStream(fis);
BufferedReader d = new BufferedReader(
new InputStreamReader(in, "utf-8"));
String line = null;
while ((line = d.readLine()) != null) {
content.append(line + lineSeparator);
}
d.close();
in.close();
fis.close();
Writer ow = new OutputStreamWriter(new FileOutputStream(destFileName),
"GBK");
ow.write(content.toString());
ow.close();
}
/**
* 复制文件或文件夹,如果遇到同名的文件或文件夹,则覆盖
* @param sourcePath 源文件或文件夹的完整路径名
* @param targetPath 目标文件夹的完整路径
* @return
*/
private boolean copyFile(String sourcePath, String targetPath) {
//返回值
boolean error = true;
//执行过程
try {
if(!targetPath.endsWith("/") || !targetPath.endsWith("\\"))
targetPath += "\\";
File dir = new File(targetPath);
File file = new File(sourcePath);
if(file.exists()) {
if(file.isFile()) {
//删除目标路径上的同名文件
String dirPath = dir.getAbsolutePath();
if(!dirPath.endsWith(File.separator)) {
dirPath += File.separator;
}
//移动文件
if(file.renameTo(new File(dir, file.getName()))) {
error = error && true;
}
else {
error = error && false;
}
}
else if(file.isDirectory()) {
//删除目标路径上的同名文件夹
String dirPath = dir.getAbsolutePath();
if(!dirPath.endsWith(File.separator)) {
dirPath += File.separator;
}
this.deleteFile(dirPath + file.getName());
//在目标路径上新建一个空的同名文件夹
File newDir = new File(dirPath + file.getName());
error = error && newDir.mkdirs();
//移动文件夹的内容
boolean error_d = true;
File[] files = file.listFiles();
for(File tempFile : files) {
error_d = error_d && this.copyFile(tempFile.getAbsolutePath(), dirPath + file.getName());
}
error = error && error_d;
}
else {
error = false;
}
}
else {
error = false;
}
}
catch(Exception e) {
error = false;
}
//返回
return error;
}
/**
* 删除文件或文件夹
* @param path 要删除文件的完整路径名,或文件夹的完整路径名
* @return
*/
private boolean deleteFile(String path) {
//返回值
boolean error = true;
//执行过程
try {
File file = new File(path);
if(file.exists()) {
if(file.isDirectory()) {
boolean error_d = true;
//删除文件夹的内容
File[] files = file.listFiles();
for(File tempFile : files) {
error_d = error_d && this.deleteFile(tempFile.getAbsolutePath());
}
//删除空文件夹
if(file.delete()) {
error = error_d && true;
}
else {
error = error_d && false;
}
}
else if(file.isFile()) {
if(file.delete()) {
}
else {
error = false;
}
}
else {
error = false;
}
}
else {
error = false;
}
}
catch(Exception e) {
error = false;
}
//返回
return error;
}
public static void main(String[] args) {
FormatInterchange fi = new FormatInterchange();
//将C:\test\src目录下的所有文件转换成UTF-8格式,存放到C:\test\UTF8目录下,文件目录树形结构保持不变(SVN的.svn目录则直接复制,不转换)
fi.transfer_GBK_To_UTF8("C:\\test\\src", "C:\\test\\UTF8");
// //将C:\test\UTF8\src目录下的所有文件转换成GBK格式,存放到C:\test目录下,文件目录树形结构保持不变(SVN的.svn目录则直接复制,不转换)
// fi.transfer_UTF8_To_GBK("C:\\test\\UTF8\\src", "C:\\test");
}
}
分享到:
相关推荐
文件包含:gbk2utf-8.bat、utf-82gbk.bat、iconv.exe及使用说明.txt四个文件 使用说明:1把要转换的所有.h和.c文件拷入该目录下,双击相应的bat文件即可。 2转换结果会保存在utf-8Res或gbkRes目录下。 3如果转换除...
同样,如果要将UTF-8文件转换为GBK,只需将上述代码中的`'gbk'`和`'utf-8'`位置互换即可。 在实际操作中,需要注意的是,编码转换可能会丢失信息。如果原始文件中含有目标编码不支持的字符,转换后这些字符可能无法...
源代码-gb2312和utf-8文件编码互换源码 v1.05.zip 源代码-gb2312和utf-8文件编码互换源码 v1.05.zip 源代码-gb2312和utf-8文件编码互换源码 v1.05.zip 源代码-gb2312和utf-8文件编码互换源码 v1.05.zip 源代码-gb...
标题中的"UTF-8与GB2312之间的互换类.rar_ UTF-8toGB2312_UTF-8 GB2312_gb2312_mmi_ch"指的是一个能够帮助开发者在UTF-8和GB2312两种编码格式之间进行转换的程序类库。这个压缩包可能包含了源代码文件,使得用户可以...
本程序实现utf-8和gb2312编码互换 特色: 1、可以自定义要转换的文件扩展名 2、可以自定义要转换的文件的路径(相对,绝对) 3、自动识别编码格式 4、转换时自动将结果输出到指定的文件夹。不会覆盖原因的...
3. **编码转换工具**:这个名为"gb2312和utf-8文件编码互换工具"的程序,能够帮助用户将文件从GB2312编码转换成UTF-8编码,反之亦然。这对于处理不同编码格式的数据源,或者在不同系统间迁移文件时非常有用。例如,...
在IT行业中,字符编码是处理文本数据的基础,GBK、Unicode和UTF-8是三种常见的字符编码格式,它们各自有特定的使用场景和特点。本文将详细介绍这三种编码方式,并提供C语言实现它们之间转换的函数。 GBK编码是中国...
在本案例中,我们有一个名为"gb2312和utf-8文件编码互换工具 v1.05-ASP源码.zip"的压缩包,它包含了一款ASP源码,可以实现gb2312与utf-8编码之间的转换。 首先,让我们了解一下gb2312和utf-8编码。GB2312,全称...
asp源码—gb2312和utf-8文件编码互换源码asp版 v1.05.zip asp源码—gb2312和utf-8文件编码互换源码asp版 v1.05.zip asp源码—gb2312和utf-8文件编码互换源码asp版 v1.05.zip asp源码—gb2312和utf-8文件编码互换源码...
在深入探讨UTF-8与GB2312之间的互换方法之前,我们首先需要理解这两种编码的基本概念及其特点。 **UTF-8(Unicode Transformation Format - 8 bits):** UTF-8是一种可变长度的字符编码格式,它支持Unicode标准中...
本程序实现utf-8和gb2312编码互换 特色: 1、可以自定义要转换的文件扩展名 2、可以自定义要转换的文件的路径(相对,绝对) 3、自动识别编码格式 4、转换时自动将结果输出到指定的文件夹。不会覆盖原因的文件。...
在深入探讨UTF-8、GB2312与UCS码的互换之前,我们首先需要理解每一个编码标准的基本概念及其重要性。 ### 一、UCS:国际标准化组织ISO的10646标准 UCS(Universal Character Set)是ISO 10646标准定义的一个字符集...
《中文编码转换器详解:Big5、GBK、Unicode与UTF8的互换之道》 在计算机世界里,字符编码是沟通人类语言与机器之间的重要桥梁。本文将详细讲解标题所提及的“中文 Big5/GBK/Unicode/UTF8 内码转换器”这一工具,...
本工具“编码互换工具 UTF-8_GB2312_BIG5”专注于解决不同编码格式之间的转换问题,主要涉及到UTF-8、GB2312和BIG5这三种编码标准。 1. **UTF-8**:这是一种广泛使用的 Unicode 字符编码方案。UTF-8 的最大特点是...
这个源码包“ASP源码—gb2312和utf-8文件编码互换源码 v1.05.zip”显然是为了解决在ASP环境中处理不同字符编码——GB2312和UTF-8之间的转换问题。GB2312是中国大陆广泛使用的简体中文字符集,而UTF-8是Unicode的一种...
"Unicode/GBK/UTF8编码转换工具"的目标就是将输入的数字或中英文字符按照指定的编码格式转换成16进制表示,这样的结果可以直接用于程序代码中。例如,当你需要在程序中硬编码一个字符串的字节序列时,16进制的表示...
这就是 ASCII 编码的由来,ASCII 编码是美国信息互换标准代码的缩写。 然而,世界上其他国家的语言里有很多是 ASCII 里没有的,为了可以在计算机保存这些文字,人们决定采纳 127 号之后的空位来表示这些新的字母、...
在描述中提到的“对《UTF-8与GB2312之间的互换》的进行了改进”,意味着这是一个针对GB2312(中国的一个简体中文编码标准)和UTF-8(一种广泛使用的Unicode编码实现)之间转换的程序或库,进行了优化或修复了一些...
用javascript实现gb2312转utf-8的脚本 本文讲解如何使用javascript实现gb2312编码到utf-8编码的转换。gb2312是中国国家标准的汉字编码字符集,共分两级,第一级为常用字,有3755字,第二级为次常用字,有3008字。...
在这个"基于ASP的gb2312和utf-8文件编码互换源码 v1.05.zip"压缩包中,提供的源码显然专注于解决一个常见的问题:在ASP环境中,如何在GB2312和UTF-8两种不同的字符编码之间进行转换。 GB2312是中国大陆广泛使用的...