java文件读取内容转码
答案:3 悬赏:0 手机版
解决时间 2021-03-28 12:51
- 提问者网友:抽煙菂渘情少年
- 2021-03-28 07:15
java文件读取内容转码
最佳答案
- 五星知识达人网友:零点过十分
- 2021-03-28 08:01
读取的文件流如果是read(读取字节流的时候,中文就会是乱码)方法,所以现在全都是听过readline方式进行的读取。举例:
可以通过BufferedReader 流的形式进行流缓存,之后通过readLine方法获取到缓存的内容。
BufferedReader bre = null;
try {
String file = "D:/test/test.txt";
bre = new BufferedReader(new FileReader(file));//此时获取到的bre就是整个文件的缓存流
while ((str = bre.readLine())!= null) // 判断最后一行不存在,为空结束循环
{
System.out.println(str);//原样输出读到的内容
};
bre.close(),//关闭流,否则bre流会一直存在,直到程序运行结束。
除此之外,java文件读取的时候有中文就很出现乱码,通常获取到的文件中通常都是“iso8859-1”格式,需要转换为“UTF-8”格式。
如:String str = new String(str.getByte("iso8859-1"),"UTF-8");进行下强制转换后在进行读取即可。
备注:通常格式有GBK、UTf-8、iso8859-1、GB2312,如果上面的强制转换不成功,依次进行这些格式的尝试,肯定是可以解决问题的。
可以通过BufferedReader 流的形式进行流缓存,之后通过readLine方法获取到缓存的内容。
BufferedReader bre = null;
try {
String file = "D:/test/test.txt";
bre = new BufferedReader(new FileReader(file));//此时获取到的bre就是整个文件的缓存流
while ((str = bre.readLine())!= null) // 判断最后一行不存在,为空结束循环
{
System.out.println(str);//原样输出读到的内容
};
bre.close(),//关闭流,否则bre流会一直存在,直到程序运行结束。
除此之外,java文件读取的时候有中文就很出现乱码,通常获取到的文件中通常都是“iso8859-1”格式,需要转换为“UTF-8”格式。
如:String str = new String(str.getByte("iso8859-1"),"UTF-8");进行下强制转换后在进行读取即可。
备注:通常格式有GBK、UTf-8、iso8859-1、GB2312,如果上面的强制转换不成功,依次进行这些格式的尝试,肯定是可以解决问题的。
全部回答
- 1楼网友:玩世
- 2021-03-28 09:44
有图吗?把你的代码拿出来看看
- 2楼网友:不想翻身的咸鱼
- 2021-03-28 08:48
打散重装就好了。
public static String encode(String str) {
if (str == null || "".equals(str))
return str;
try {
str = URLEncoder.encode(str, "UTF-8");
} catch (UnsupportedEncodingException e1) {
e1.printStackTrace();
}
return str;
}
public static String encode2(String str) {
if (str == null || "".equals(str))
return str;
try {
str = URLEncoder.encode(URLEncoder.encode(str, "UTF-8"), "UTF-8");
} catch (UnsupportedEncodingException e1) {
e1.printStackTrace();
}
return str;
}
public static String decode(String str) {
if (str == null || "".equals(str))
return str;
try {
str = URLDecoder.decode(str, "UTF-8");
} catch (UnsupportedEncodingException e1) {
e1.printStackTrace();
}
return str;
}追问打散重装?是将一个字的截取出来再重新组成一个新的字符串?追答我给你的这3个方法你看了么 前两个方法就是打散重装,就是将一个字符串打散成2进制编码,再重新组装成自己想要的编码格式。这样能防止乱码的产生。追问用第一个方法得到
%5Cu8fd9%5Cu662f%5Cu4e00%5Cu4e2a%5Cu5bc6%5Cu7801
用第二个方法得到
%255Cu8fd9%255Cu662f%255Cu4e00%255Cu4e2a%255Cu5bc6%255Cu7801
用第三个方法得到
\u8fd9\u662f\u4e00\u4e2a\u5bc6\u7801
即使在第一个方法后用第三个方法也得到\u8fd9\u662f\u4e00\u4e2a\u5bc6\u7801
却不是想要的:这是一个密码追答在java中汉字在后台是以16进制存储的,你这个是16进制的代码。你只要直接输出
String a = "\u8fd9";
System.out.println(a);
就能输出汉字“这”了。写到文件里也是这样。
public static String encode(String str) {
if (str == null || "".equals(str))
return str;
try {
str = URLEncoder.encode(str, "UTF-8");
} catch (UnsupportedEncodingException e1) {
e1.printStackTrace();
}
return str;
}
public static String encode2(String str) {
if (str == null || "".equals(str))
return str;
try {
str = URLEncoder.encode(URLEncoder.encode(str, "UTF-8"), "UTF-8");
} catch (UnsupportedEncodingException e1) {
e1.printStackTrace();
}
return str;
}
public static String decode(String str) {
if (str == null || "".equals(str))
return str;
try {
str = URLDecoder.decode(str, "UTF-8");
} catch (UnsupportedEncodingException e1) {
e1.printStackTrace();
}
return str;
}追问打散重装?是将一个字的截取出来再重新组成一个新的字符串?追答我给你的这3个方法你看了么 前两个方法就是打散重装,就是将一个字符串打散成2进制编码,再重新组装成自己想要的编码格式。这样能防止乱码的产生。追问用第一个方法得到
%5Cu8fd9%5Cu662f%5Cu4e00%5Cu4e2a%5Cu5bc6%5Cu7801
用第二个方法得到
%255Cu8fd9%255Cu662f%255Cu4e00%255Cu4e2a%255Cu5bc6%255Cu7801
用第三个方法得到
\u8fd9\u662f\u4e00\u4e2a\u5bc6\u7801
即使在第一个方法后用第三个方法也得到\u8fd9\u662f\u4e00\u4e2a\u5bc6\u7801
却不是想要的:这是一个密码追答在java中汉字在后台是以16进制存储的,你这个是16进制的代码。你只要直接输出
String a = "\u8fd9";
System.out.println(a);
就能输出汉字“这”了。写到文件里也是这样。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯