UTF Byte Order Mark (BOM) FAQ

1341 ワード

UTF-8はバイトを符号化ユニットとし、バイト順の問題はない.UTF-16は2バイトを符号化手段とし、1つのUTF-16テキストを解釈する前に、まず各符号化手段のバイト順を明らかにする.例えば、「奎」を受け取ったUnicode符号化は594 Eであり、「乙」のUnicode符号化は4 E 59である.UTF-16バイトストリーム「594 E」を受信した場合、これは「奎」ですか、それとも「乙」ですか.Unicode仕様で推奨されるタグバイト順の方法はBOMである.BOMは「Bill Of Material」のBOMテーブルではなく、Byte Order Markです.UCS符号化には「ZERO WIDTH NO-BLEAK SPACE」という文字があり、その符号化はFEFFである.一方,FFFEはUCSには存在しない文字であるため,実際の伝送に現れるべきではない.UCS仕様では、バイトストリームを転送する前に、「ZERO WIDTH NO-BRAK SPACE」という文字を転送することを推奨しています.このように受信者が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符号化であることが分かる.
Bytes                Encoding Form 

00 00 FE FF          UTF-32, big-endian 

FF FE 00 00          UTF-32, little-endian 

FE FF                UTF-16, big-endian 

FF FE                UTF-16, little-endian 

EF BB BF             UTF-8

 
http://blog.sina.com.cn/s/blog_3e9d2b350100as0b.html http://www.jb51.net/article/9794.htm