国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

Java IO文件編碼轉(zhuǎn)換實現(xiàn)代碼

2019-11-26 15:49:44
字體:
供稿:網(wǎng)友

對IO操作真心不是很懂。。。對編碼、亂碼也是一知半解。。。今天遇到了一個需求,要求將一個文件進行編碼轉(zhuǎn)換,并且返回編碼后的字符串,如原本的GBK編碼,轉(zhuǎn)換為UTF-8

其中這個BytesEncodingDetect 類就不貼了。主要用了里面的獲取文件編碼格式。

剛開始試了直接在源文件修改編碼方式,采用URLEncoder和URLDecoder進行轉(zhuǎn)換,卻遲遲不行。出現(xiàn)了中文奇數(shù)最后一個字亂碼

百度找了解決方法,都未果,只好采用我的思路是:先讀取源文件的內(nèi)容,存放到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() {
 }

 /**
  * 編碼轉(zhuǎn)換
  * @param toCharset 要轉(zhuǎn)換的編碼
  * @param path 要轉(zhuǎn)換的文件路徑
  * @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];
  // 編碼相同,無需轉(zhuǎn)碼
  if (charset.equalsIgnoreCase(toCharset)) {
   return "編碼一樣,無需轉(zhuǎn)換";
  }

  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;
 }

}

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 沧州市| 夏河县| 项城市| 泽普县| 革吉县| 景洪市| 汕尾市| 吉林省| 修水县| 菏泽市| 湄潭县| 通海县| 乌拉特前旗| 西乡县| 辉县市| 开封市| 屏东县| 昌宁县| 梁河县| 广州市| 施甸县| 五指山市| 武功县| 绥滨县| 巫溪县| 安顺市| 喀喇沁旗| 游戏| 南阳市| 紫金县| 西贡区| 扶绥县| 德昌县| 隆林| 太原市| 旌德县| 罗源县| 柞水县| 聊城市| 云梦县| 霍邱县|