Java IO檔案編碼轉換實現代碼_java

來源:互聯網
上載者:User

對IO操作真心不是很懂。。。對編碼、亂碼也是一知半解。。。今天遇到了一個需求,要求將一個檔案進行編碼轉換,並且返回編碼後的字串,如原本的GBK編碼,轉換為UTF-8

其中這個BytesEncodingDetect 類就不貼了。主要用了裡面的擷取檔案編碼格式。

剛開始試了直接在源檔案修改編碼方式,採用URLEncoder和URLDecoder進行轉換,卻遲遲不行。出現了中文奇數最後一個字亂碼

百度找瞭解決方法,都未果,只好採用我的思路是:先讀取源檔案的內容,存放到StringBuffer裡面,然後刪除源檔案,再重新new一個檔案,再以另一中編碼形式存放進去。

查看編碼後效果:注意不要在eclipse查看效果,eclipse以一種編碼形式查看而已,所以可以在瀏覽器端查看如html檔案,查看指定編碼可以右鍵---編碼,以此來判斷是否成功。

複製代碼 代碼如下:

package com.test;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.URLDecoder;
import java.net.URLEncoder;

public class Transcoding {
 private BytesEncodingDetect encode = new BytesEncodingDetect();
 public Transcoding() {
 }

 /**
  * 編碼轉換
  * @param toCharset 要轉換的編碼
  * @param path 要轉換的檔案路徑
  * @return
  * @throws Exception
  */
 public String encoding(String toCharset, String path) throws Exception{
  File srcFile = new File(path);
  int index = encode.detectEncoding(srcFile);
  String charset = BytesEncodingDetect.javaname[index];
  // 編碼相同,無需轉碼
  if (charset.equalsIgnoreCase(toCharset)) {
   return "編碼一樣,無需轉換";
  }

  InputStream in = new FileInputStream(path);

  BufferedReader br = new BufferedReader(
    new InputStreamReader(in, charset));

  StringBuffer sb = new StringBuffer();
  String s1;
  while ((s1=br.readLine())!=null) {
   String s = URLEncoder.encode(s1, toCharset);
   sb.append(s+"\r\n");//一行+斷行符號
  }

  br.close();
  srcFile.delete();//刪除原來檔案
  //重新以新編碼寫入檔案並傳回值
  File newfile = new File(path);//重建立原來的檔案
  newfile.createNewFile();
  OutputStream out = new FileOutputStream(newfile);
  OutputStreamWriter  writer = new OutputStreamWriter(out, toCharset);
  BufferedWriter bw = new BufferedWriter(writer);
  bw.write(URLDecoder.decode(sb.toString(), toCharset));
  String result = URLDecoder.decode(sb.toString(), toCharset);
  bw.flush();//刷到檔案中
  bw.close();
  return result;
 }

}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.