utf-8 BOM及びC#BOM除去方法


Unicode仕様にはBOMの概念があります.BOM-Byte Order Markは、バイト順タグです.ここでBOMに関する説明を見つけます.
UCS符号化には「ZERO WIDTH NO-BRAKSPACE」という文字があり、その符号化はFEFFである.一方,FFFEはUCSには存在しない文字であるため,実際の伝送に現れるべきではない.UCS仕様では、バイトストリームを転送する前に、「ZERO WIDTH NO-BRAKSPACE」という文字を転送することを推奨しています.このように受信者がFEFFを受信すると、このバイトストリームはBig−Endianであることを示す.FFFEが受信されると、このバイトストリームはLittle−Endianであることが示される.したがって「ZERO WIDTH NO-BRAK SPACE」はBOMとも呼ばれる.
UTF−8はバイト順を示すためにBOMを必要としないが、符号化方式をBOMで示すことができる.文字「ZERO WIDTH NO-BRAK SPACE」のUTF-8符号化はEF BB BFである.したがって,受信者がEF BB BFで始まるバイトストリームを受信すると,これがUTF−8符号化であることが分かる.
WindowsはBOMを使ってテキストファイルをマークする符号化方式です.
C#BOM除去方法:
Encodingの指定時に使用
using System.Text;
var encoding = new UTF8Encoding(false);

reference: 
http://www.csharpwin.com/csharpspace/11628r8120.shtml
http://hi.baidu.com/singkuan/item/37b586d9aad53fe954347ff7