ソースコードでUTF-8のBOM付きと不付きについて

ソースコードでUTF-8のBOM付きと不付きについて

- 浮亭 夢介 の投稿
返信数: 5

UTF-8のBOM付きと不付きの2つのソースファイルを作成し
eplatex -kanji=utf8 file[.tex]
としてコンパイルすると両方ともOKでした.
因みにUnicode(BE) と (LE) についても実験しました.
こちらはコンパイル中断となりました.
Unicode と UCS については奥深いもおがあるようで混乱します.

さて,UTF-8 を使うとすれば BOM 付きにするか,あるいは不付き
とするか迷います.皆様方のご意見を伺いたいと思います.

浮亭 夢介 への返信

Re: ソースコードでUTF-8のBOM付きと不付きについて

- 奥村 晴彦 の投稿
私はすべてUTF-8(BOMなし)で統一しています。

TeX関連ではどちらでも大丈夫だと思いますが,BOMがあると設定ファイルやシェルスクリプトの類でエラーになることがよくあります。
奥村 晴彦 への返信

Re: ソースコードでUTF-8のBOM付きと不付きについて

- 浮亭 夢介 の投稿

やっぱりBOM不付きが無難のようですね.

---
余談:
(1)メモ帳(notepad)ではデフォルトがBOM付き
(2)TeXworksではBOM不付き
(3)メモ帳で作成したファイルをTeXworksで読み込み
保存するとBOM不付きになる.

浮亭 夢介 への返信

Re: ソースコードでUTF-8のBOM付きと不付きについて

- Z. R. の投稿

TeX での UTF-8/UTF-16 の入力の扱いをまとめると次のようになります:

  1. 8 ビット欧文 TeX(pdfTeX)+ LaTeX の UTF-8 入力エンコーディング指定: UTF-8(BOM無)も UTF-8(BOM有)も OK。(もちろん UTF-16 はダメ。)
  2. (e-)(u)pTeX で入力漢字コード(-kanji)が utf8: UTF-8(BOM無)も UTF-8(BOM有)も OK。
  3. (e-)(u)pTeX で入力漢字コード(-kanji)が utf8 以外: この場合でも UTF-8(BOM有)は UTF-8 として読み込まれる。「UTF-8 の BOM のバイト列」がないものは「指定の入力漢字コード」とみなされる。
  4. XeTeX (\XeTeXinputencoding が空(既定値)): UTF-8(BOM有/無)、UTF-16(BE/LE;BOM有/無)の全てを(自動判別して)受け付ける。
  5. LuaTeX (入力フィルタ設定なし): UTF-8(BOM有/無)のみを受け付ける。

※ Windows の文字コードの用語では「Unicode」は「UTF-16」のことです。当然ながら、「UTF-8 用の設定」では「Unicode」(= UTF-16)のファイルは扱えません。

余談ですが:
1 で UTF-8(BOM有)が OK なのは現在の欧文 TeX が入力ファイルの先頭の「UTF-8 の BOM のバイト列」を常に無視するからのようです(W32TeX と TeX Live 2010 で確認)。少し昔の欧文 TeX はそうではなかったと記憶しています。いつ変わったのでしょうかね…。

Z. R. への返信

Re: ソースコードでUTF-8のBOM付きと不付きについて

- Akira Kakuto の投稿
> 1 で UTF-8(BOM有)が OK なのは現在の欧文 TeX が
> 入力ファイルの先頭の「UTF-8 の BOM のバイト列」を
> 常に無視するからのようです(W32TeX と TeX Live 2010 で確認)。

これは、W32 の場合だけだったと思います。
(texmfmp.c の input_line() を使うもの)