UTF-8とUTF-8Nの違い

RubyでWebアプリケーションを作る際にDBも含めて文字コードUTF-8に統一しようということになってUTF-8でコードを書いた。ところが何度試してもプログラムが動いてくれない。よくよく調べるとRubyが扱える文字コードは正確にはUTF-8Nという文字コードらしく、文字コードをUTF-8Nに変更してやるとすんなり動いたということがありました。

では、UTF-8とUTF-8Nはどこか違うのだろうか?

  • UTF-8はファイルの先頭にBOMが付いている
  • UTF-8Nはファイルの先頭にBOMが付いていない

BOMって何だろうと調べたらByte Order Markの略でコード識別のための特別なコードの事らしいです。BOMについてはWikipediaのUTF-8の項目内に詳しく書かれています。

基本的にUTF-8Nを使うようにしたほうがいいよという感じなのかな。普通UTF-8といったらUTF-8Nを指すみたいだけど、UTF-8とUTF-8Nの両方が指定できるようになっているエディタ*1では注意が必要のようです。

*1:TeraPadとか。自分はTeraPad使っててハマりました。