uncategorized

用C#改變文字檔的編碼方式

一般來說在讀寫文字檔時候很少會注意文字檔案的編碼方式,畢竟都在windows環境,怎樣都可以把文字檔內容讀出來不過,當今日文字檔是做為資料傳遞工具時候,編碼方式就會很重要。剛好與到一個案例,其實在程式中可以快速進行編碼轉換。
例如原本編碼如下圖:

來源檔案編碼都不相同,但是想要把output檔案轉成統一格式,以這個案例為例,想要把檔案統一轉為UTF-8格式。可以這樣寫一個簡單的轉換程式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
string SourcePath = Properties.Settings.Default["SourcePath"].ToString();
string TargetPath = Properties.Settings.Default["TargetPath"].ToString();
DirectoryInfo info = new DirectoryInfo(SourcePath);
Console.Write("Start Change Format!!");
foreach (var s in info.GetFiles("*.txt"))
{
Console.WriteLine(s.FullName);
File.WriteAllText(string.Format("{0}\\{1}", TargetPath, s.Name), File.ReadAllText(s.FullName, Encoding.Default), Encoding.UTF8);
File.Delete(s.FullName);
}
Console.Write("End Change!!");
Console.Read();

作法就是將檔案抓出來,然後再寫入另一個檔案,再寫入檔案同時進行Encoding動作就可以。在C#常用的編碼方式都可以列舉出來

若是遇到無列舉的編碼,也可以用Encoding.GetEncoding("UTF-8")去進行編碼動作。要是今天透過Stream物件呢?把資料讀進來處理後再作寫檔案的動作,這樣也是可以做編碼的指定

1
2
3
4
using(StreamWriter sw=new StreamWriter(string,false,Encoding.UTF8))
{
......
}