2016年3月31日木曜日

プログラミングに「メモ帳」を使うな?BOM・改行コードについて考える


お久しぶりです。chiko ryoです。

さて今回は、Windowsにデフォでついてくる「メモ帳」でテキストファイルを保存したときに頭を悩ませる「BOM」と「改行コード」について考えてみようと思います。

メモ帳でUTF-8を使うとBOMがついてくる

メモ帳で「名前を付けて保存」すると嫌でもBOMが付いてきます。BOMなしUTF-8を得るには何かしらのツールが必要になります。
そもそもBOMというのは、「このファイルの文字コードはUTF-8ですよー」という意味の制御コードです。文字化け防止にもなるいい奴なのですが、プログラミングでは邪魔になります。
<meta charset="utf-8">
<?php
  echo file_get_contents(/* BOMつきUTF-8空ファイル */);
?>
<div style="background-color:#000;color:#fff;">上に隙間があるはずです。開発者ツールでみると制御記号が入っているのがわかります。</div>
黒いdivの上に変な隙間があるのがお分かりいただけるかと思います。これがBOMの仕業です。

BOM対策

対策としては、
  • メモ帳を使わない(他のソフトを使う)
  • 保存後に手作業で削除
あたりでしょうか。メモ帳ではBOMなしUTF-8が保存できないのでこうすることになります。

メモ帳では改行コードがCR+LFになる

これもなかなかの問題です。

Windowsでは基本的に改行コードはCR+LFです。きっとWindowsで作成したテキストがMac(CR派)やLinux(LF派)でも表示されるように、という配慮(であってほしい)です。

ただ、文字コードがCRだけ/LFだけのテキストファイルをメモ帳で開こうとすると、
メモ帳は「改行はCR+LF」と思っている → LF(CR)が単独でくる → メモ帳は改行だと思わない
といった具合で改行が潰れます。

改行コード問題への対策

  • メモ帳を使わない(他のソフトを使う)
  • 変換する
メモ帳以外のソフトとしては、いろいろと選択肢があります。ちなみに私はサクラエディタを使っています。
また、改行コード問題に関しては、moreコマンドを使えばWindows標準で変換できるようです。詳しくは テキスト・ファイルの行末コードを変更するとかの情報が参考になると思います。

いかがでしょうか。今回はメモ帳のBOMと改行コードについてここまで論じてきましたが、結論としてはMSが強制メモ帳ではできないので他の策を講じる、ということになりそうです。