如何解决GBK的编码的文件中的中文转换成为UTF-8编码的文件而且不乱码
首先我们必须明确一点,为什么正常转换会乱码?
因为我们的数据写入是GBK写入的,然后展示的话是按照文件保存形势展示的,前面保存形势是GBK,一致,所以不乱码,而后面将保存形势变成了UTF-8,但是写入的内容是GBK形势的,编码解码方式不一致,所以产生乱码。
我们一般的解决乱码的思路是:
String s=new String(str.getBytes("GBK"),"UTF-8");
我将它解决的思路也是这样子的:
首先我们知道引起乱码的只是因为中文,中文乱码的方式看起来就是上面那样解决的。
将文件的编码改变,而且里面的内容的编写编码也随之改变,很显然不是单纯地对文件进行格式改变,改变格式的同时必定要改变文件的内容。
我的初步想法:
将文件内容读取到流中,然后按指定编码写入到目标文件中。
过程:
将目标文件取读到流中
读取源文件中的信息用字符串的形式展示,
将字符串写入目标文件
注意问题:
1、读取目标文件默认读取编码是当前项目编码而不是源文件编码,我们可以使用FileInputStream的含有编码方式的构造达到我们的要求
2、取读每一行字符串后的写入其实是不需要转换字符串格式的。就像我就犯了一个错误,我前面将读取成功的字符串通过new String(getBytes("GBK"),"UTF-8");的形式再次写入文件中,导致一直乱码,忽略了一个问题,就是我读取文件的时候其实已经解码了,此时字符串的编码方式应该就是我的项目编码方式了。
3、读取完一行数据记得的换行
其他的问题就是:
将文件夹中的所有指定文件都进行编码格式的改变,一个递归调用指定方法的过程罢了!
代码实现:
import org.apache.commons.io.IOUtils; import java.io.*;
import java.util.ArrayList; /**
* Created by Administrator on 2016/12/1.
*/
public class Test {
String ROUTE_URL="D:/test";
String srcEncode;
ArrayList<File> fileArray=new ArrayList<File>(); public void trans(String filePath) throws Exception{
getFileClass(new File(filePath));
for (File file:fileArray){
transEncode(file.getAbsolutePath());
}
} /**
* 将文件由GBK格式读取,UTF-8格式写入
* 运行的项目应该是UTF-8的项目
* filePath用相对路径方便转移。如果使用绝对路径自己改一下输出流的url
*/
public void transEncode(String filePath) throws Exception{
File target=new File(ROUTE_URL,filePath);
FileInputStream fis=new FileInputStream(filePath);
BufferedReader br=new BufferedReader(new InputStreamReader(fis,srcEncode));
FileOutputStream fos=new FileOutputStream(target);
IOUtils.copy(br,fos);
fos.flush();
fis.close();
fos.close();
} /*
* 递归遍历指定目录下的指定后缀文件
*/
/*
* 返回值类型 void
* 参数列表 文件夹File
* 出口条件:文件,后缀名是.class,如果排除的话加!即可.多个可使用全局变量
*
*/
public void getFileClass(File file){
File[] files=file.listFiles();
for(File f:files){
if(f.isDirectory()){
getFileClass(f);
}else{
if(f.getName().endsWith(".java") || f.getName().endsWith(".jsp")){
System.out.println(f.getAbsolutePath());
fileArray.add(f);
}
}
}
}
}
如何解决GBK的编码的文件中的中文转换成为UTF-8编码的文件而且不乱码的更多相关文章
- JS文件中的中文在网页上显示为乱码解决方法
转自:http://www.pc6.com/infoview/Article_63835.html 如果JS文件中的中文在网页上显示为乱码,不妨采用本文章中的方法来试一试,或许能解决使你很头疼的问题. ...
- 《Java虚拟机原理图解》1.5、 class文件中的方法表集合--method方法在class文件中是怎样组织的
0. 前言 了解JVM虚拟机原理是每一个Java程序员修炼的必经之路.但是由于JVM虚拟机中有很多的东西讲述的比较宽泛,在当前接触到的关于JVM虚拟机原理的教程或者博客中,绝大部分都是充斥的文字性的描 ...
- Java基础知识强化之IO流笔记52:IO流练习之 把一个文件中的字符串排序后再写入另一个文件案例
1. 把一个文件中的字符串排序后再写入另一个文件 已知s.txt文件中有这样的一个字符串:"hcexfgijkamdnoqrzstuvwybpl" 请编写程序读取数据内容,把数据排 ...
- extern的原理很简单,就是告诉编译器:“你现在编译的文件中,有一个标识符虽然没有在本文件中定义,但是它是在别的文件中定义的全局变量,你要放行!”
extern的原理很简单,就是告诉编译器:“你现在编译的文件中,有一个标识符虽然没有在本文件中定义,但是它是在别的文件中定义的全局变量,你要放行!”
- 在C的头文件中定义的结构体,如何在cpp文件中引用
解决方案1:在cpp文件中放置.c,且在该文件中引用变量 解决方案2:在一个cpp文件中包含.c,但在另一个cpp文件中使用结构体变量 cpp文件1 cpp文件2 #include "dia ...
- 《Java虚拟机原理图解》1.4 class文件中的字段表集合--field字段在class文件中是怎样组织的
0.前言 了解JVM虚拟机原理是每一个Java程序员修炼的必经之路.但是由于JVM虚拟机中有很多的东西讲述的比较宽泛,在当前接触到的关于JVM虚拟机原理的教程或者博客中,绝大部分都是充斥的文字性的描述 ...
- GBK 编码时 url 中带中文参数的问题
项目中遇到的 GBK 编码问题,记录如下. 将代码精简为: <!DOCTYPE HTML> <html> <meta charset="gb2312" ...
- JS文件中的中文在网页引用时显示乱码的简单解决方式
今天把一个jquery方法从前台cshtml文件转移到单独的js文件中后执行不成功,调试发现if判断中的中文字符串变成了乱码,之前在前台文件中是可以正常显示的,所以判定可能是跟文件的编码方式有关系. ...
- 解决python中write()函数向文件中写中文时出现乱码的问题
今天看<python编程从入门到实践>的第10章文件.异常,在做练习的时候,向文件中写内容,但是写中文就不行,后来在百度上查了众多资料,解决方法如下: 解决:在open()函数中添加一个e ...
随机推荐
- MongoDB入门学习(二):MongoDB的基本概念和数据类型
上一篇讲了MongoDB的安装和管理,当中涉及到了一些概念,数据结构另一些API的调用,不知道的没关系,事实上非常easy,这篇会简介一下. 1.文档 文档是MongoDB的核心概念.多个键值对有序的 ...
- (二)关于jQuery
jQuery是一个快速.简洁的JavaScript框架,是继Prototype之后又一个优秀的JavaScript代码库(或JavaScript框架).jQuery设计的宗旨是“write Less, ...
- C# Excel
using System.IO;using System.Text;namespace iLIS.Common{ ///<summary> ///生成Excel文档内容 /// 存入工作流 ...
- 14:质数因子PrimeNum
14:题目描述 功能:输入一个正整数,按照从小到大的顺序输出它的所有质数的因子(如180的质数因子为2 2 3 3 5 ) 详细描述: 函数接口说明: public String getResult( ...
- java 接口回调
学习自:http://blog.csdn.net/xiaanming/article/details/8703708/ http://hellosure.iteye.com/blog/1130176 ...
- Centos 7 远程桌面客户端
在centos下面要远程连接windows,有人说用rdesktop,但是好像centos 7没有,对从源代码编译也不大感兴趣. 幸好还有人提醒, https://geekblood.com/2014 ...
- android利用apkplug框架实现主应用与插件通讯(传递随意对象)实现UI替换
时光匆匆,乍一看已半年过去了,经过这半年的埋头苦干今天最终有满血复活了. 利用apkplug框架实现动态替换宿主Activity中的UI元素.以达到不用更新应用就能够更换UI样式的目的. 先看效果图: ...
- CentOS下安装python3.x版本
现在python都到了3.x版本,但是centos中自带的python仍然是2.7版本的,所以想把python换成3.x版本的. 但是这个地方有个坑,你要是直接编译安装了python3.x之后,估计你 ...
- Linux模块机制浅析_转
Linux模块机制浅析 转自:http://www.cnblogs.com/fanzhidongyzby/p/3730131.htmlLinux允许用户通过插入模块,实现干预内核的目的.一直以来,对l ...
- delphi 解析Json格式(转自:http://blog.csdn.net/jayqiang/article/details/7066824)
SuperObject 是开源的 Delphi 的 JSON 工具包,可生成 JSON 数据以及进行 JSON 解析. unit Unit6; interface uses Windows, Mess ...