UTF-8N、UTF-8 BOM 付を知る修行

UNICODE は基本多倍長のコードなので、バイトオーダを指定する必要がある。なので、バイトオーダを指定する制御コード BOM (Byte Order Mark) をファイルの先頭とかに挿入する。UTF-8 の場合可変長コード体系であり、バイトオーダを指定する必要はないけど、ただの ASCII ファイルじゃなくて UTF-8 だよ、ってことを明示するために BOM を挿入したりする。
必要ないわけだから、BOM をつけなくてもいい。これが UTF-8N と言われるもの。

Windows のメモ帳は UTF-8 で読み書きできるけど、自動的に BOM 付の UTF-8 になる。おそらく、UTF-8 で保存したものは UTF-8 として開けるようにしたいからではないだろうか。
結論として、こういうときは BOM 付きにしろ、こういうときは BOM なしにしろ、と言いたいところだが、それはこれから調査。

BOM ってのは ZERO WIDTH NO-BREAK SPACE のことかと思っていたけれど、根の深い問題があるようだ。
NICE Unicode !