EPUBファイルの作り方で文字化けを防ぐ最優先の対策は、読めない状態の原稿を唯一の原本へ上書きしないことです。文字コードを推測だけで切り替えるのではなく、先頭、中ほど、末尾の確認語を決め、開いた直後と保存後に同じ文字が読めるかを比較します。EPUBの構造検査は、その復号確認が終わってから行います。
読めないファイルを見つけたら原本を退避する
ファイルを開いたとき、記号や漢字が不自然でも、最初の操作を「別の文字コードで保存」にしてはいけません。原本を読み取り専用の控えとして残し、作業用複製へ日付と試行番号を付けます。先頭の章名、中ほどの固有名詞、末尾の終端語をメモし、3地点が同時に正しく見える候補だけを次へ進めます。
一般的なエディタでも、UTF-8、Shift_JIS、UTF-16LEなど候補を一つずつ開き直せます。見るべきなのは「日本語らしい文字が何個か出た」ことではありません。3地点の文字がすべて一致し、行数と改行位置も原稿の想定に合うことです。既に破損したバイナリの完全復元やOCRは、この予防手順の範囲外です。
「UTF-8のはず」で止めず、実際のエラーを入口で出す
今回の合成標本は、UTF-8で保存した固有名の一文「登場人物は𠮷野直樹」を入力にしました。納品先を厳密なShift_JISと仮定して一文字ずつ符号化すると、𠮷(U+20BB7)が1件の変換不能文字として検出されました。これはShift_JISバイトをUTF-8として読んだ復号エラーではなく、正しく読めているUnicode文字が保存先の文字集合で表せないという、題名どおりの文字単位のエラーです。
検出記録には文字、コードポイント、原稿内オフセット、対象方式を保存しました。英数字や通常の漢字だけを眺めて「保存できそう」と判断せず、固有名を含む実際の入力全体を検査します。損失を伴うShift_JIS保存は実行せず、元標本のSHAを固定して次の回復へ進みました。
Rune Studioの判定と、保存後のバイト検査を分ける
Rune StudioのタブにShift_JISを指定する応答だけでは、𠮷が保存できる証拠になりません。厳密な事前検査で1件を得た時点でその経路を拒否し、表記を変えずに扱えるUTF-8を採用しました。元ファイルは上書きせず、accepted-utf8.txtという別の保存先へ書きました。
保存後のファイルを閉じてrune inspect text --fileで再読込みするとUTF-8でした。さらにUTF-8への厳密な符号化エラーは0件、復号全文は入力と一致しました。元標本と採用版のSHA256はいずれも2a1c655bdd2dd7a4f89d4511b56d83a33e2cf29a30884b8ae8e77656ac423444です。同一SHAは上書きの証拠ではなく、別パスへ同じバイトを保全できた結果です。
製品資料には変換不能文字の赤表示、保存警告、自動保存停止が説明されていますが、今回のCLIは画面を描画していません。赤色を見たとは主張せず、文字単位1件、損失保存なし、UTF-8で0件、全文一致を合格根拠にします。
可読性、保存形式、変換不能文字を同じ印にしない
文字が読めることと、指定した保存先で表現できることは別です。今回の𠮷はUTF-8画面で正しく読めても、厳密なShift_JISでは表せません。可読性は全文比較、形式は再読込み値、変換不能文字は対象方式への符号化検査として三欄に分けます。
入稿先がShift_JIS必須なら、技術担当が似た「吉」へ黙って替えてはいけません。著者または編集者が表記変更を承認し、その新しい本文を別版として0件まで再検査します。UTF-8を受け付けるなら、今回のように表記を維持した別名UTF-8を渡します。
EPUBの構造検査より先に原稿を合格させる
EPUBのZIP構造やXHTMLが成立しても、入力時に誤って復号した文字は直りません。そこで今回はパッケージ検査の前に、受領原稿の宣言、Rune Studioによる実符号の判定、UTF-8への保存、閉じたファイルの再検査を一枚の票にしました。
出力へ進める条件は、採用したUTF-8で変換不能0件、全文一致、採用ファイルのハッシュが記録済みであることです。その後のEPUB検査では、固有名がXHTMLに存在するかを別に確認します。販売先の受理や全リーダーの表示一致は、この原稿入口試験からは断定できません。
失敗した候補を消さずに戻り先を決める
3地点が読めないなら、保存前の複製を閉じて別の復号候補へ戻ります。保存後だけ値が変わったなら、タブの文字コード設定と保存先を見直します。EPUB内だけ語が欠けるなら、原稿選択と変換結果へ戻ります。問題の層によって戻り先を変えれば、正しい原本を触らずに修正できます。
拒否した候補には「文字コード不一致」「中ほどの固有名詞不一致」など理由を付けます。失敗ファイルを残すと、同じ誤った候補を翌日に試すのを防げます。原本を壊さず、どの候補が読めたかを説明できること自体が復旧余地になります。
保存前の5項目がそろえば出力へ進める
完了票には、原本のハッシュ、試した保存先、変換不能文字とコードポイント、採用形式、保存後の再読込値を書きます。今回の標本では厳密なShift_JISで𠮷が1件の変換不能文字となり、その保存経路を拒否しました。別名UTF-8版は変換不能0件、全文一致、入力と同一SHAでした。赤い警告表示の視覚挙動は未実測なので、確認済みと記入しません。
epubファイル 作り方の次の一歩は、短い複製をUTF-8で保存し直し、その複製を閉じてから再読込することです。文字が読めること、保存形式が狙いどおりであること、EPUB構造が成立することを三段に分ければ、文字化けをパッケージの奥へ持ち込みにくくなります。


