要转的类型好像有 "EBCDIC cp937" "GBK" "BIG5" 等。。。
想请教一下 大概该怎么实现比较好。。。主要是想知道 怎么准确判断文件是什么编码格式的。。。
这个问题到底该怎么正确转成UTF8呢。。。大家帮帮忙。。。先谢谢了!
15 个解决方案
#1
input
String str=new String(input.getBytes,"UTF-8");
String str=new String(input.getBytes,"UTF-8");
#2
先读取文件,然后
Writer w = new OutputStreamWriter(new FileOutputStream(destFileName), "utf-8");
Writer w = new OutputStreamWriter(new FileOutputStream(destFileName), "utf-8");
#3
首先要能检测出文件的编码格式,然后才能读取出来,再转换成其他格式。
问题就是在于,怎么判断文件的编码格式是个困难。
问题就是在于,怎么判断文件的编码格式是个困难。
#4
jsjszg 说得对。。。
new String(input.getBytes,"UTF-8");这个是会不正确的
因为获取到的就不对 转码 导致转码也不会正确。。。
new String(input.getBytes,"UTF-8");这个是会不正确的
因为获取到的就不对 转码 导致转码也不会正确。。。
#6
即使可以探测编码 效率也很有影响
#7
判断编码格式,都是先把文件转为字节数组,然后根据第一,第二,第三数组的值判断的。
#10
一个系统应该是定下来的,编码格式。从前台到后台保持统一即可。
转换的方法就像1L和2L讲的,是这样的,但是如果项目的编码格式不是UTF-8,或者文件内容本身就不是UTF-8写进去的,强转为UTF-8的结果,还是乱码的。
LZ可以试试在windows下读取一个txt文档(包含中文字符,如果是中文操作系统,默认会是GBK格式的),然后将读取的字符串转成UTF-8,然后控制台打印下看看,会是乱码的。
转换的方法就像1L和2L讲的,是这样的,但是如果项目的编码格式不是UTF-8,或者文件内容本身就不是UTF-8写进去的,强转为UTF-8的结果,还是乱码的。
LZ可以试试在windows下读取一个txt文档(包含中文字符,如果是中文操作系统,默认会是GBK格式的),然后将读取的字符串转成UTF-8,然后控制台打印下看看,会是乱码的。
#11
感谢大家的帮助。。。我的问题 自己解决了 最终确定了 只有可能三种编码方式 。。。我一一判断 转码成功了。。。
但是现在出现别一个问题。。。因为转码是给Unix用的。。转码后在Unix上看到的每行都会有个"^M"
我知道这个是Unix的换行结束符。。我想知道怎么避免我的程序转码后在Unix上查看正确并不会出现这个"^M"
需要在我的原程序 上修改些什么。。。
但是现在出现别一个问题。。。因为转码是给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();
}
粗略写了下
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();
}
粗略写了下
#15
2楼是对的勒
#1
input
String str=new String(input.getBytes,"UTF-8");
String str=new String(input.getBytes,"UTF-8");
#2
先读取文件,然后
Writer w = new OutputStreamWriter(new FileOutputStream(destFileName), "utf-8");
Writer w = new OutputStreamWriter(new FileOutputStream(destFileName), "utf-8");
#3
首先要能检测出文件的编码格式,然后才能读取出来,再转换成其他格式。
问题就是在于,怎么判断文件的编码格式是个困难。
问题就是在于,怎么判断文件的编码格式是个困难。
#4
jsjszg 说得对。。。
new String(input.getBytes,"UTF-8");这个是会不正确的
因为获取到的就不对 转码 导致转码也不会正确。。。
new String(input.getBytes,"UTF-8");这个是会不正确的
因为获取到的就不对 转码 导致转码也不会正确。。。
#5
#6
即使可以探测编码 效率也很有影响
#7
判断编码格式,都是先把文件转为字节数组,然后根据第一,第二,第三数组的值判断的。
#8
#9
#10
一个系统应该是定下来的,编码格式。从前台到后台保持统一即可。
转换的方法就像1L和2L讲的,是这样的,但是如果项目的编码格式不是UTF-8,或者文件内容本身就不是UTF-8写进去的,强转为UTF-8的结果,还是乱码的。
LZ可以试试在windows下读取一个txt文档(包含中文字符,如果是中文操作系统,默认会是GBK格式的),然后将读取的字符串转成UTF-8,然后控制台打印下看看,会是乱码的。
转换的方法就像1L和2L讲的,是这样的,但是如果项目的编码格式不是UTF-8,或者文件内容本身就不是UTF-8写进去的,强转为UTF-8的结果,还是乱码的。
LZ可以试试在windows下读取一个txt文档(包含中文字符,如果是中文操作系统,默认会是GBK格式的),然后将读取的字符串转成UTF-8,然后控制台打印下看看,会是乱码的。
#11
感谢大家的帮助。。。我的问题 自己解决了 最终确定了 只有可能三种编码方式 。。。我一一判断 转码成功了。。。
但是现在出现别一个问题。。。因为转码是给Unix用的。。转码后在Unix上看到的每行都会有个"^M"
我知道这个是Unix的换行结束符。。我想知道怎么避免我的程序转码后在Unix上查看正确并不会出现这个"^M"
需要在我的原程序 上修改些什么。。。
但是现在出现别一个问题。。。因为转码是给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();
}
粗略写了下
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
#15
2楼是对的勒