最近用java做大量讀取/xml/txt/文件時遇到了很多亂碼不一致的問題。有的txt是gbk,有的xml又是gb2312。等格式,我目的是把這些文件中的數據提取可用信息保存到數據庫。結果發現經程序很難判斷文件編碼格式。不知道該定義什麼編碼去讀取,雖然java提供了Charset.defaultCharset()類,但我測試,還是沒有c#提供的API類好使用。就是StreamReader,它還有一個很做棒的參數對象,就是Encoding.Default; 通過它可以不用指定讀取編碼,使用本地系統編碼,並且寫入的時候還可以指定編碼寫入,這不就達到了我們想要的目的,把多種編碼統一。。。下面就上代碼吧。。。很簡單的...
/* * 由SharpDevelop創建。 * 用戶: hubiao * 日期: 2014/5/2 * 時間: 9:45 */ using System; using System.Collections.Generic; using System.Drawing; using System.Windows.Forms; using System.Text; using System.IO; namespace encodeingUtils { /// <summary> /// Description of MainForm. /// </summary> public partial class MainForm : Form { private String pathTemp; public MainForm() { InitializeComponent(); } public void Button1Click(object sender, System.EventArgs e) { buGo.Enabled = false; try{ //創建directory對象 DirectoryInfo directory = new DirectoryInfo(tbPath.Text); FileSystemInfo[] infos = directory.GetFileSystemInfos(); //臨時存儲文件 pathTemp = Path.GetTempPath()+"/"+Guid.NewGuid().ToString()+".dat"; //遞歸獲取文件,並轉碼 fileList(infos); }catch(Exception xe){ MessageBox.Show(xe.Message); } File.Delete(pathTemp); MessageBox.Show("OK"); buGo.Enabled = true; } void MainFormLoad(object sender, EventArgs e) { comBoxDefautlCode.Items.AddRange(new Object[]{"utf-8","GBK","gb2312"}); } void BuShowClick(object sender, EventArgs e) { } public void fileList(FileSystemInfo[] fsins) { foreach(FileSystemInfo fs in fsins){ //判斷文件 FileInfo file = fs as FileInfo; if(file!=null){ StreamReader sr = new StreamReader(file.FullName,Encoding.Default); StreamWriter sw = new StreamWriter(pathTemp,false,Encoding.GetEncoding(comBoxDefautlCode.Text)); for(string line = null;(line=sr.ReadLine())!=null;){ sw.WriteLine(line); } sw.Close(); sr.Close(); sr = new StreamReader(pathTemp,Encoding.Default); sw = new StreamWriter(file.FullName,false,Encoding.GetEncoding(comBoxDefautlCode.Text)); for(string line = null;(line=sr.ReadLine())!=null;){ sw.WriteLine(line); } sw.Close(); sr.Close(); } //判斷文件夾 DirectoryInfo direct = fs as DirectoryInfo; if(direct!=null){ fileList(direct.GetFileSystemInfos()); } } } } }
程序圖片
轉換之後文件編碼:
本程序的目的是爲了把文件編碼格式統一。如果文件內容編碼不同,則也不能保正內容也正常轉換
缺點:比如iso-8859-1的內容轉換成utf-8。則可能失敗。。。
優點:java文件,txt/xml/dat文件。只要都是能識別的內容,即轉換成功就更大。