using System;
using System.Text;
using System.IO;
namespace DetectEncoding
{
class Program
{
//偵測byte[]是否為BIG5編碼
public static bool IsBig5Encoding(byte[] bytes)
{
Encoding big5 = Encoding.GetEncoding(950);
//將byte[]轉為string再轉回byte[]看位元數是否有變
return bytes.Length ==
big5.GetByteCount(big5.GetString(bytes));
}
//偵測檔案否為BIG5編碼
public static bool IsBig5Encoding(string file)
{
if (!File.Exists(file)) return false;
return IsBig5Encoding(File.ReadAllBytes(file));
}
static void Main(string[] args)
{
//準備5個檔案,分別存成UTF-8(無BOM), UTF-8(含BOM), Unicode, BIG5, 英數字
string s = "中文測試";
string[] files = new string[] {
"D:\\UTF8.txt", "D:\\UTF8wBOM.txt", "D:\\Unicode.txt",
"D:\\BIG5.txt", "D:\\ASCII.txt"
};
//WriteAllText(),預設Encoding為不含BOM的UTF-8編碼
File.WriteAllText(files[0], s);
//存為含BOM的UTF-8
File.WriteAllText(files[1], s, new UTF8Encoding(true));
//存為Unicode
File.WriteAllText(files[2], s, Encoding.Unicode);
//存為BIG5
File.WriteAllText(files[3], s, Encoding.GetEncoding(950));
//純英數字,存為ASCII
File.WriteAllText(files[4], "123ABC", Encoding.ASCII);
//測試結果
foreach (string file in files)
{
Console.WriteLine("{0} {1}BIG5編碼.",
Path.GetFileName(file),
IsBig5Encoding(file) ? "相容於" : "不相容於"
);
}
Console.Read();
}
}
}