[Develop] .Net建立沒有BOM特性的U-tf8文字檔

[Develop] .Net建立沒有BOM特性的U-tf8文字檔

用 .Net 建立不含BOM檔案特性的Utf-8文字檔
Hence the need for a BOM arises in the context of text interchange, rather than in normal text processing within a closed environment.
BOM是用來描述text file的Unicode 特性的一種運用方式,它是一個兩個 Byte 的Mark,0xFF 0xFE (或是看到 EF BB BF)。他是可以選擇的選項,當您選擇您的文件檔案要有BOM的描述支援時,他就會出現在檔案的最前方。當電腦收到一份儲存成Unicode的純文字的檔案,電腦必須判斷其編碼模式為何 ? 因此BOM提供給文件的建立者一個方法描述文件的編碼格式來協助電腦判讀這份文字檔案的編碼格式。
詳細資訊請參考下列網址:
Byte order mark
http://en.wikipedia.org/wiki/Byte_order_mark

在這個範例裡面,我們去下載一個免費的軟體 NodePad2,你在Google上輸入nodepad2就可以找到可以下載的地方。

clip_image001

以下做個驗證測試:
在專案中我們建立兩個叫做MyTest.txt與MyTest2.txt的檔案。MyTest.txt 是有加入BOM的檔案格式,在Nodepad2里看到的編碼會是
UTF-8 With Signature。MyTest2.txt 則是沒有加入BOM的檔案格式,在Nodepad2里看到的編碼會是 UTF-8
。兩份檔案的內容是一模一樣。

clip_image002

在.Net中我們將兩個檔案以二進位編碼的方式開啟

clip_image003

檢視兩個檔案的差別,MyTest.txt檔案因為有加入了BOM的特性,所以在檔案的編碼上比MyTest.txt多了EF BB BF的字碼。

clip_image004

clip_image005

.Net建立沒有BOM的範例程式

開啟一個新的VB.Net 的From專案,並且在預設的Windows Form裡面建立一個Button按鈕。

clip_image006

.Net建立沒有BOM的範例程式

開啟一個新的VB.Net 的From專案,並且在預設的Windows Form裡面建立一個Button按鈕。

//設定檔案儲存位置
string path = @ 』 D:\notepad2\test.txt 』 ;
//建立測試用的檔案內容
string createText = 『這裡是測試用的文字內容』;
//建立一個 UTF8Encoding 類別,此類別用來描述 UTF8編碼的特性。在建構子的部分我們帶入 False,表示不需要提供 byte order mark
UTF8Encoding utf8 = new UTF8Encoding(false);
// This text is added only once to the file.
if (!System.IO.File.Exists(path)){
// 利用System.IO.File.WriteAllText建立檔案,並且在第三個參數的部分帶入我們建立的UTF8Encoding 類別的Instance
System.IO.File.WriteAllText(path, createText, utf8);
}

clip_image007

在建立出來的Button按鈕上點兩下,進入程式編輯視窗,在button1_Click事件裡輸入下列程式碼。

clip_image008

接著編譯執行檔案,您可以在您的指定路徑下看到一個檔案被產生出來。

clip_image009

接著以Notepad2軟體來檢視次檔案編碼,此檔案被儲存為Utf-8的格式。

clip_image010

相關參考資料:
UTF8Encoding Class Represents a UTF-8 encoding of Unicode characters.
UTF8Encoding(Boolean) Initializes a new instance of the UTF8Encoding class.
A parameter specifies whether to provide a Unicode byte order mark.

http://msdn.microsoft.com/en-us/library/system.text.utf8encoding.aspx

clip_image011