違いがひと目で分かる!MacのUTF-8テキストエディタ、UTF-8・BOMを判定

同じ内容の三つの原稿をバイト検査し、BOMの先頭印と改行の違いを見分けるアイキャッチ

MacでUTF-8原稿を受け取ったら、編集前に「UTF-8として妥当か」「BOMがあるか」「改行はLFかCRLFか」を別々に観測します。本記事は値を読むところまでが担当です。変換、修復、候補比較、保存後の採否判断は行いません。

画面に同じ日本語が見えても、先頭バイトと行末バイトは違うことがあります。そこでターミナルのxxdとiconvを使い、原稿へ書き込まずに観測します。以下はmacOS上で2026年8月11日に確認した一般コマンドの結果で、Rune Studio固有の実測ではありません。

UTF-8として読めるかを先に確認する

対象をmanuscript.txtとすると、次のコマンドはUTF-8として解釈できないバイトがある場合にエラーを返します。

iconv -f UTF-8 -t UTF-8 manuscript.txt >/dev/null

終了しても「元の符号化は必ずUTF-8」とまでは証明しません。ASCIIだけのファイルなど、複数の符号化で同じバイトになる場合があるためです。受領元の申告と文字コード表示も併記し、ここでは「UTF-8として妥当なバイト列だった」と記録します。

BOMは先頭3バイトだけを見る

先頭3バイトは次で読めます。

xxd -l 3 -g 1 manuscript.txt

UTF-8のBOMはef bb bfです。表示された3バイトがこれと一致すれば「UTF-8 BOMあり」、一致しなければ「UTF-8 BOMなし」です。BOMがないことだけでUTF-8と断定はしません。

確認用の一文校正開始をUTF-8/LFにした実値は、BOMなしがe6 a0 a1で始まり、BOMありがef bb bf e6 a0 a1で始まりました。これは対象原稿の値ではなく、見分け方を固定するための管理標本です。

改行は0Aと0D 0Aを区別する

行末付近をxxd -g 1 manuscript.txtで表示します。LFは0a、CRLFは0d 0aです。BOMとは別の属性なので、「BOMあり/LF」「BOMなし/CRLF」のように二欄へ書きます。

同じ一文の管理標本では、UTF-8/LFの末尾が... e5 a7 8b 0a、UTF-8/CRLFの末尾が... e5 a7 8b 0d 0aでした。改行の種類を数える必要がある大きな原稿では、全体を扱う別の検査へ渡します。本記事は代表行のバイト観測に限定します。

観測カードは値と解釈を分ける

引き継ぎカードは次の四欄で十分です。

観測項目 実値欄 解釈欄 注意
UTF-8妥当性 iconvの終了結果 妥当 / エラー 元符号化の断定ではない
先頭3バイト 例:ef bb bf BOMあり / なし BOMの採否は決めない
代表行末 例:0d 0a CRLF / LF BOMと統合しない
対象 ファイル名・SHA-256 観測した版 別版へ流用しない

値が取れなかった欄は「なし」ではなく「未観測」です。対象ファイルの名前だけでなくSHA-256を添えると、別担当が同じ版を見たか確認できます。SHA-256はshasum -a 256 manuscript.txtで読みます。

観測カードにはコマンド文字列も残します。ファイル名に空白がある場合は引用符で囲み、実行した対象を取り違えないようにします。出力のスクリーンショットだけでは、どの版を読んだか分からないため、対象SHAとコマンド結果を同じ行へ置きます。

一つの原稿にLFとCRLFが混在している可能性がある場合、代表行の値を全体値へ広げません。「代表行はLF、全体混在は未観測」と記します。また、先頭がef bb bfでない結果を「BOMなし」と書くことはできますが、「UTF-8確定」とは書きません。実値と解釈の範囲を守ることが、次工程の誤変換を防ぎます。

Rune Studioが担うのは文字コード安全機能まで

Stage 3資料では、Rune Studioが主要な日本語文字コードを判定し、変換不能文字を表示し、未解決時の自動保存を止めることを確認しています。これは原稿を開く前後の安全機能として使えます。

一方、BOMの有無、先頭バイト、LF/CRLFをRune Studioが自動検査するという根拠はありません。本記事のxxd結果を製品機能として書き換えません。変換作業はSTUDIO-534、保存停止の運用はSTUDIO-065、事故分類はSTUDIO-006へ渡します。

画面の下にUTF-8とLFが表示されたRune Studioの編集画面
編集画面の下に、開いている原稿の文字コードUTF-8と改行コードLFが表示されています。表示は選んでいる値であり、保存されたファイルのバイトがそのとおりかは別に確かめます。

変更前カードを渡したら観測は完了

完了条件は、対象の識別子、UTF-8妥当性、先頭3バイト、代表行末が実値で埋まり、推測と未観測が区別されていることです。BOMを付ける・外す、改行を揃える、別名保存する、といった変更はこのカードの外で行います。

最初にxxd -l 3 -g 1で先頭を読み、次に代表行末を見ます。二つを別欄へ写すだけで、見た目が同じファイルをBOMや改行の推測で扱う事故を減らせます。観測日時とmacOS環境も添えれば、再観測時の差を同じ条件で説明でき、再現性も上がります。