文字コードと改行コードは、同じステータスバーに並んでいても別の設定です。テキストエディタ 文字コード 変換を行うときは、「Shift_JISからUTF-8」と「LFからCRLF」の二つの変化を別欄にします。内容一致の検査とバイト形式の検査も分けると、どちらで失敗したかが明確です。
二つの変更を一つの成功表示で済ませない
実測ではShift_JIS標本を開き、UTF-8とCRLFへの設定変更をそれぞれ下見してから適用しました。その後に内容をUTF-8で書き出し、閉じたファイルを再検査すると、最終値はUTF-8・LFでした。文面は保持されましたが、CRLF指定の永続化はこの生成物では確認できません。
ここで「文字化けなし」だけを合格にすると、Windows側のツールがCRLFを要求する案件で手戻りが起きます。逆に、CRLFのバイトがあっても復号が壊れていれば受け渡せません。「復号後内容」と「改行バイト」の二行を常に一組で残します。
復旧は、元のShift_JIS版と、UTF-8へ変換した本文版を残したまま、目的の改行だけを持つ第三の複製を作ります。合格条件は、文字コード、改行、文字数、固定行の内容がすべて再読込みで意図どおりになることです。今回の実測はUTF-8・LFの成功までであり、CRLF完了の根拠にすり替えません。
符号化と改行を直交する二軸で試す
UTF-8かShift_JISかという軸と、LFかCRLFかという軸を一つのラベルにまとめません。まず復号して文章を確定し、その文字列を保ったまま行末だけを変更します。逆順にすると、誤復号した文章を正常なLFとして保存する危険があります。検査表には検出文字コード、復号文字数、行数、CRLF件数、LF件数、末尾改行を並べます。
再読込みでは二軸を同じ順に検査します。UTF-8・LFが期待値でも、文字列差があれば不合格です。文字列が同じでもCRLFが残れば形式だけをやり直します。この分離により、原稿内容へ戻るべき失敗と保存形式へ戻るべき失敗を取り違えません。
四組の形式を混ぜない試験表
理論上はUTF-8/LF、UTF-8/CRLF、Shift_JIS/LF、Shift_JIS/CRLFの四組があります。実際の採用組だけを見るのではなく、受領時の組と納品時の組を明記します。文字コードを直した保存、改行を直した保存を別ファイルにすると、どちらの操作で文章差が入ったかを特定できます。
一段目の複製は正しく復号できるが改行は受領時のまま、二段目は同じ文字列でLFへ統一、という流れです。二段の文字列ハッシュが同じで、二段目のCRLFが0なら形式変換の目的を満たします。
外部編集で一段目が更新された場合、二段目へ上書きせず新しい試行を作ります。二軸の値と試行番号があれば、古い校正版へ巻き戻る事故を防げます。
入稿仕様を「UTF-8」と「LF」の二欄にする
文字コードと改行コードは別の属性です。UTF-8へ変換できてもCRLFが残る場合があり、LFへ変えてもShift_JISのままなら依頼の半分しか終わっていません。作業票には入力方式、入力改行、出力方式、出力改行を四つの欄で書き、本文ハッシュは改行を正規化した比較と実バイトの比較を使い分けます。
三形式の読み取りから変換元を固定する
永続標本では同じ文をUTF-8、Shift_JIS、UTF-16LEで用意しました。検出値は各形式名と一致し、復号文字数は288、288、289でした。対象に選んだShift_JIS版をタブで開き、変換前の方式を記録します。別形式の標本を同じファイルだと思い込まないよう、入力SHAも一緒に固定しました。
設定応答の後に物理保存を行う
タブの文字コードをUTF-8、改行をLFへ変更する操作は、保存予定を決める段階です。その後に同じ復号文を目的の方式と改行で物理ファイルへ書き、ワークスペースを閉じて再読込みしました。最終値はUTF-8・LF、文字列は変換元と同一、保存SHAは63d05d439bc02581056282209d78d988a2af17007dc905e9d2d801ef0923f893です。
改行だけ不一致なら本文を直さない
再読込みがUTF-8・CRLFなら、文字化け修正へ戻る必要はありません。逆にShift_JIS・LFなら、改行は合っていても符号化工程だけをやり直します。行が結合したときも手入力で改行を足さず、未変更の入力から別名で再生成します。失敗した軸だけを直すために二欄の判定が役立ちます。
四点の領収書で納品する
合格票にはUTF-8、LF、正規化後の全文一致、保存ファイルSHAを残します。エディタ画面での赤背景と自動保存停止は今回のCLIでは未実測です。保存後の実ファイルを読み直した値が合って初めて、変換操作を終えたと言えます。
バイト確認ではCRLFの0D 0AとLFの0Aを重複して数えないよう、まずCRLF対を数えてから単独LFを判定します。末尾改行を含める仕様なら、その一件も予定値に入れます。納品先の行数表示と実バイト数が異なる場合は、どちらが誤りか決めつけず、末尾の空行規則を照合してから再保存します。