java如何实现任意编码文件转UTF8

时间:2023-01-10 14:59:36
小弟新手。。。现在有个任务就需要用java实现将文件转码成UTF8编码。。。文件的类型不确实。。。
要转的类型好像有  "EBCDIC cp937"  "GBK"  "BIG5" 等。。。
想请教一下 大概该怎么实现比较好。。。主要是想知道 怎么准确判断文件是什么编码格式的。。。
这个问题到底该怎么正确转成UTF8呢。。。大家帮帮忙。。。先谢谢了!

15 个解决方案

#1


input
String str=new String(input.getBytes,"UTF-8");

#2


先读取文件,然后
 Writer w = new OutputStreamWriter(new FileOutputStream(destFileName), "utf-8");

#3


首先要能检测出文件的编码格式,然后才能读取出来,再转换成其他格式。
问题就是在于,怎么判断文件的编码格式是个困难。

#4


jsjszg   说得对。。。
new String(input.getBytes,"UTF-8");这个是会不正确的
  因为获取到的就不对 转码 导致转码也不会正确。。。

#6


即使可以探测编码 效率也很有影响

#7


判断编码格式,都是先把文件转为字节数组,然后根据第一,第二,第三数组的值判断的。

#8


JAVA判断文件编码类型
Java版文件编码转换工具
你可以打开jar包查看源代码

#10


一个系统应该是定下来的,编码格式。从前台到后台保持统一即可。

转换的方法就像1L和2L讲的,是这样的,但是如果项目的编码格式不是UTF-8,或者文件内容本身就不是UTF-8写进去的,强转为UTF-8的结果,还是乱码的。

LZ可以试试在windows下读取一个txt文档(包含中文字符,如果是中文操作系统,默认会是GBK格式的),然后将读取的字符串转成UTF-8,然后控制台打印下看看,会是乱码的。

#11


感谢大家的帮助。。。我的问题 自己解决了  最终确定了 只有可能三种编码方式 。。。我一一判断 转码成功了。。。
但是现在出现别一个问题。。。因为转码是给Unix用的。。转码后在Unix上看到的每行都会有个"^M"
我知道这个是Unix的换行结束符。。我想知道怎么避免我的程序转码后在Unix上查看正确并不会出现这个"^M"
 需要在我的原程序 上修改些什么。。。

#12


楼主可以贴出你解决方案的代码看看么。我现在也有个需求要读取windows下的文件保存在utf-8的数据库clob字段中

#13


public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(new File("F:\\test\\io\\1.txt")),"gbk"));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(new File("F:\\test\\io\\2.txt")),"utf-8"));
int ch =  0;
while((ch=br.read()) != -1){
bw.write(ch);
}
bw.flush();
br.close();
bw.close();
}
粗略写了下

#14


使用java进行文件编码转换
这个工具类可以实现

#15


2楼是对的勒

#1


input
String str=new String(input.getBytes,"UTF-8");

#2


先读取文件,然后
 Writer w = new OutputStreamWriter(new FileOutputStream(destFileName), "utf-8");

#3


首先要能检测出文件的编码格式,然后才能读取出来,再转换成其他格式。
问题就是在于,怎么判断文件的编码格式是个困难。

#4


jsjszg   说得对。。。
new String(input.getBytes,"UTF-8");这个是会不正确的
  因为获取到的就不对 转码 导致转码也不会正确。。。

#5


#6


即使可以探测编码 效率也很有影响

#7


判断编码格式,都是先把文件转为字节数组,然后根据第一,第二,第三数组的值判断的。

#8


JAVA判断文件编码类型
Java版文件编码转换工具
你可以打开jar包查看源代码

#9


#10


一个系统应该是定下来的,编码格式。从前台到后台保持统一即可。

转换的方法就像1L和2L讲的,是这样的,但是如果项目的编码格式不是UTF-8,或者文件内容本身就不是UTF-8写进去的,强转为UTF-8的结果,还是乱码的。

LZ可以试试在windows下读取一个txt文档(包含中文字符,如果是中文操作系统,默认会是GBK格式的),然后将读取的字符串转成UTF-8,然后控制台打印下看看,会是乱码的。

#11


感谢大家的帮助。。。我的问题 自己解决了  最终确定了 只有可能三种编码方式 。。。我一一判断 转码成功了。。。
但是现在出现别一个问题。。。因为转码是给Unix用的。。转码后在Unix上看到的每行都会有个"^M"
我知道这个是Unix的换行结束符。。我想知道怎么避免我的程序转码后在Unix上查看正确并不会出现这个"^M"
 需要在我的原程序 上修改些什么。。。

#12


楼主可以贴出你解决方案的代码看看么。我现在也有个需求要读取windows下的文件保存在utf-8的数据库clob字段中

#13


public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(new File("F:\\test\\io\\1.txt")),"gbk"));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(new File("F:\\test\\io\\2.txt")),"utf-8"));
int ch =  0;
while((ch=br.read()) != -1){
bw.write(ch);
}
bw.flush();
br.close();
bw.close();
}
粗略写了下

#14


使用java进行文件编码转换
这个工具类可以实现

#15


2楼是对的勒