2015年12月6日日曜日

P012-BOMの処理はどうするか

今日の目標→

前回のプログラムで、Unicodeのファイルを読み込むと、ときどき先頭に妙な空白が表示されるのに気がついた。これはBOMだ。何とかしないと。

●BOM(バイトオーダーマーク)について

Unicodeテキストは、その保存形式を見分けやすくするため、最初にUnicode文字の「\uFEFF」を付けることがある。これがBOM(バイトオーダーマーク)である。文字の値としては「\uFEFF」ひとつだが、ファイルへの保存形式によって次の違いが出る。

  • UTF-16BE
    -- 16ビットをビッグエンディアンで保存するため、BOMは(fe, ff)となる。
  • UTF-16
    -- リトルエンディアンで保存するため、BOMは(ff, fe)の順になる。
  • UTF-8
    -- 可変長データに変換するため、BOMは(ef, bb, bf)の3バイトになる。

UTF-16BEとUTF-16は、データ内容からどちらなのか判別するのが原理的に難しいため、BOMの付加が強く推奨されている。いっぽうUTF-8の場合はBOMがなくても判定は容易だし、プログラムによっては未対応だし、あまりBOMを付けるメリットはない。

●いろいろな形式のUnicodeファイルを作る

実際に各種の形式のUnicodeファイルに触れてみるとわかりやすい。せっかくだからC#でいろいろなファイルを作ってみよう。コードは下記。今回はコンソールアプリケーションにしてみた。

  1. 「ファイル(F)」→「新しいプロジェクト(P)」で、プロジェクト作成ウィンドウを開く
  2. カテゴリ「Visual C#」で、テンプレート「コンソールアプリケーション」を選ぶ
  3. 名前を「EncodeFiles」と入力してプロジェクトを作成する
  4. Program.csを開き、次のコードを入力する

実行すると、PCのデスクトップに「WorkFolder」というフォルダができ、さらにその中にいろいろなエンコードのHTMLファイルが作られる。

●次回の予告

BOMの処理の続き。

0 件のコメント:

コメントを投稿