关于javaIO流与字符集的问题总结

      这两天用java写了一个小的脚本,以方便工作使用。但是面对中文字符时总是出现乱码问题。以下是我处理程序的片段代码:

      BufferedWriter bw=null;
    try {
   //创建目录
   File fileDir=new File(cp.getCsv_path());
   if(!fileDir.exists()){
    if(fileDir.mkdirs()){
     //创建文件
     File csvfile=new File(csvpath);
     if(!csvfile.exists()){
      if(!csvfile.createNewFile()){
       System.out.println("create csvfile error");
      }else{
       System.out.println("create csvfile successful!!");
      }
     }
     System.out.println("create csvfileDir ok");
    }else{
     System.out.println("create csvfileDir error");
    }
   }
   bw=new BufferedWriter(new FileWriter(csvpath));
   result=co.getCVSStr()+"\n"+result;
   System.out.println("=========================================");
   System.out.println(result);

  //result.getBytes("UTF-8")将系统默认的字符集转换成UTF-8
   String utfStr=new String(result.getBytes("UTF-8"),"utf-8");

 //在javaIO流写入文件时仍旧使用系统默认的字符集写入文件。 
   bw.write(utfStr);
   bw.flush();
  } catch (IOException e) {
   e.printStackTrace();
  }finally{
   try {
    bw.close();
   } catch (IOException e) {
    e.printStackTrace();
   }
  }

 

在代码中本以为使用红色区域的代码就可以保证写入文件的字符问UTF-8字符集的。但实际上还是采用操作系统默认的字符集写入文件。其主要的原因,是我没有对IO流进行字符集的指定,所以在流将信息写入文件的时候仍然采用的系统默认的字符集。在代码中红色区域的代码实际上是做了无用功。并没有起到真正的效果。

 

2 .采用以下方式就可以了:

 PrintWriter pw=null;
  try {
   //创建目录
   File fileDir=new File(cp.getCsv_path());
   if(!fileDir.exists()){
    if(fileDir.mkdirs()){
     //创建文件
     File csvfile=new File(csvpath);
     if(!csvfile.exists()){
      if(!csvfile.createNewFile()){
       System.out.println("create csvfile error");
      }else{
       System.out.println("create csvfile successful!!");
      }
     }
     System.out.println("create csvfileDir ok");
    }else{
     System.out.println("create csvfileDir error");
    }
   }
   pw=new PrintWriter(csvpath,"utf-8");
   result=co.getCVSStr()+"\n"+result;
   System.out.println("=========================================");
   System.out.println(result);
   pw.write(result);
   pw.flush();
  } catch (IOException e) {
   e.printStackTrace();
  }finally{
   pw.close();
  }
  return result;
 }

 

使用PringWriter类在写入文件时使信息解码为字符集为UTF-8格式。具有这样功能类还有OutputStreamWriter和InputStreamWriter。

你可能感兴趣的:(工作,脚本)