java文件读取内容转码

publicstaticvoidmain(String[]args)throwsIOException{//TODOAuto-generatedmethodstubFil... public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
File file=new File("F://svn//Test.properties");
InputStream io=new FileInputStream(file);
byte[] buf=new byte[(int)file.length()];
io.read(buf);
String str=new String(buf);
byte[] str1=str.getBytes();
//String str="\u8fd9\u662f\u4e00\u4e2a\u5bc6\u7801";
System.out.println(str.length());
System.out.println("file.encoding:" + System.getProperty("file.encoding"));
String st=transaction(str1);
System.out.println(st);
}
protected static String transaction(byte[] filename){
String str=null;
try {
str=new String(filename,"UTF-8");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return str;
}
就这样一个代码,为什么从文件中读取得到的String,查看length得到的是36,转码得不到预期结果。
//String str="\u8fd9\u662f\u4e00\u4e2a\u5bc6\u7801";

而直接写在代码里面的String,length是6,转码成功为“这是一个密码”
展开
 我来答
198901245631
推荐于2016-10-24 · TA获得超过3.5万个赞
知道大有可为答主
回答量:9037
采纳率:92%
帮助的人:1746万
展开全部
读取的文件流如果是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,如果上面的强制转换不成功,依次进行这些格式的尝试,肯定是可以解决问题的。
沫声墨o
推荐于2016-10-23 · 超过53用户采纳过TA的回答
知道答主
回答量:179
采纳率:100%
帮助的人:112万
展开全部
打散重装就好了。
/**
* 编码:输入一个字符串,返回编码后的字符串
*
* @author qinzy
* @param str
* @return
*/
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;
}
/**
* 编码:输入一个字符串,返回两次编码后的字符串
*
* @author qinzy
* @param str
* @return
*/
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;
}
/**
* 解码:输入一个字符串,返回解码后的字符串
*
* @author qinzy
* @param str
* @return
*/
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进制编码,再重新组装成自己想要的编码格式。这样能防止乱码的产生。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
759317909
2012-12-11 · 超过21用户采纳过TA的回答
知道答主
回答量:99
采纳率:0%
帮助的人:63.2万
展开全部
有图吗?把你的代码拿出来看看
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式