事故を持ち越さない!EPUBの文字抜け、変換不能文字による文字抜けを防ぐ

文字コード変換での抜けの確認工程を、白い原稿用紙と紫色の半透明装置で抽象的に示したアイキャッチ

EPUBの文字コード変換で文字抜けを防ぐには、変換前に「変換できない文字の件数と位置」を確定し、代替後0件と、別名保存したファイルの再読込一致を合格条件にします。表示が読める、保存が終わった、という感覚だけでは判定しません。

今回の1,500字標本では、Shift_JISで表現できない文字が2件ありました。😀はインデックス16、🚀は17です。承認済みの代替を反映すると0件になり、UTF-8版とShift_JIS版を開き直した本文も一致しました。ただし、標本で想定した外字候補2件の内訳と、アプリ画面上の警告表示までは証拠化されていないため、全体の状態はpartialです。

答えは「保存できた」ではなく0件と再読込一致

文字抜けは、変換できない文字を無視したり、代替文字へ黙って置き換えたりしたときに見落としやすくなります。一般的な予防策は、変換前の件数と位置を控え、修正後に同じ検査を繰り返し、0件であることを確認する方法です。

さらに、保存直後の編集画面ではなく、別名保存した成果物を閉じて開き直します。文字数、代表文字、改行が修正版と一致したときに初めて、今回の変換を通過扱いにします。この「0件+再読込一致」が、この記事の中心です。

1,500字の標本で2か所を追跡する

検証用の原稿はShift_JIS由来の1,500字です。想定条件には絵文字2件と外字候補2件が含まれていました。実測で位置付きの変換不能文字として残ったのは、連続する😀と🚀の2件でした。

原本には手を加えず、複製側で次の開始値を固定します。

候補総数を4件へ合わせるために結果を書き換えてはいけません。検出できた2件だけを操作対象とし、残る外字候補2件は未確認として分けます。

2件を直して二つの別名版を開き直す

まず、インデックス16と17が原文の😀と🚀を指していることを照合します。次に、意味を損なわないと承認された代替へ変更し、変換不能文字の検査を再実行します。ここで1件でも残れば保存工程へ進みません。

0件になった修正版から、UTF-8版とShift_JIS版を別名で作ります。両方を閉じ、保存先から再読込し、修正後本文と比較します。比較対象は「画面で目立つ二文字」だけではなく、本文全体です。改行も照合対象に含めます。

失敗したときは、保存済み原本へ戻るのではなく、次の位置へ戻します。

実測は2件から0件、二形式で本文一致

タイトル固有Stage 4は3操作で、要求文字数と実文字数はいずれも1,500でした。変換前は2件、😀がインデックス16、🚀が17です。承認代替後は0件でした。再読込時の文字コードはUTF-8版がUTF-8、Shift_JIS版がShift_JIS、改行はLFで、repaired_text_matches=trueでした。

別の共通Stage 4では、同一の短文をUTF-8、Shift_JIS、EUC-JPで39字、UTF-16LE、UTF-16BEで40字として読み取り、いずれもLFでした。作業タブの文字コード設定もUTF-8として再取得しています。これはRune Studioが扱う形式を横断した共通確認であり、1,500字標本の2件を0件にした記事固有結果とは別です。

partialの境界と外部確認の範囲

今回のCLI検証では、Rune Studioの保存前警告、赤い背景表示、誤復号された画面の見え方、自動保存の停止・再開を確認していません。また、想定された外字候補2件が標本内のどの文字で、Shift_JIS変換にどう影響したかはresult_valuesにありません。

したがって、「絵文字2件を位置付きで検出し、代替後0件、別名二形式の再読込本文が一致した」とは言えますが、「想定4候補を全部検証した」「画面警告が作動した」とは言えません。破損済みデータの完全復元、OCR、バイナリ修復、外部EPUBリーダーやKDPでの受理も今回の確認範囲外です。

Rune Studioの公開機能と今回の実測を分ける

現行Mac版Rune Studioは、主要な日本語文字コードを読み分け、選択中の文字コードで表現できないUnicode文字を赤い背景で示し、変換不能文字が残る間は自動保存を一時停止する機能を公開しています。これは製品資料で確認したStage 3の範囲です。

今回のStage 4で確認したのは、CLIによる件数・位置、代替後0件、保存した二形式の文字コード、LF、再読込本文一致です。製品画面の見え方と操作感を、この数値検証から推定しません。

結論:0件と開き直し一致を変換の出口にする

EPUBの文字抜け対策では、変換不能文字を見つけた時点ではまだ半分です。今回の1,500字標本では、位置16の😀と位置17の🚀を追跡し、承認代替後0件、UTF-8版とShift_JIS版の再読込本文一致まで確認できました。

この結果は、候補を分類する外字記事ではなく、変換工程の出口を「0件+再読込一致」で閉じるための実例です。未記録の外字候補2件と画面警告はpartialの境界として残します。現行Mac版の機能範囲はRune Studioの商品ページで確認できます。