Pages

2009-10-05

透過Encoding BOM作不同檔案編碼的轉換

檔案文字編碼區分為ASCII及Unicode,而Unicode又區分UTF7,8,16,32等系列,
我們透過BOM (Byte Order Mark)資訊作判讀依據,但BOM不一定存在。
相關的FAQ基本知識可參考: http://www.unicode.org/unicode/faq/utf_bom.html

程式實作中,若遇到一個二進位檔,就是透過BOM資訊來偵測其編碼格式。
SNAGHTML115ef4f3

得知其最有可能(因為BOM不一定存在)編碼格式後,
即可用System.Text.Encoding.Convert(srcEncoding, dstEncoding, byte[])來作轉換。
須注意的是,轉換前要先摘除BOM資訊,轉換回來寫檔前,再先插入BOM資訊
即可完成不同Encoding的轉換。

微軟.NET Framework命名風格裏,似乎把Unicode當作是UTF-16LE,
很容易跟最新的Unicode規格混洧,可能原因是微軟的Unicode是從規格1.0開始發展,
大家使用上能理解對行了。

至於UTF32BE(Big-Endian),.NET Framework中並沒有對應的編碼屬性對應(沒寫的就是LE)
請使用Encoding.GetEncoding(12001)來替代之。

No comments: