戻る

改行・UTF-8 BOM 変換

テキストツール

読み込み中

ツールを読み込んでいます

ツールのコードは開いたときにのみ読み込まれます。

このツールの処理はすべてブラウザー内で行われ、入力内容はサーバーへ送信されません。

このツールについて

エディターでは普通の行に見えても、複数の改行形式が混在することがあります。LF、CRLF、単独 CR を区別して確認し、保持または統一を選べます。テキストの前後を削ったり、末尾の改行を勝手に追加したりしません。制限付きのエスケープ表示とともに完全な原文を保持し、変換後を別に用意します。UTF-8 のバイトシグネチャと文字としての U+FEFF を分けて管理するため、BOM の除去で実際の文字を消すことはありません。受け取り側の仕様に合わせて選択してください。

主な用途

  • Windows 形式を明示的に要求するシステム向けに CRLF の UTF-8 設定サンプルを準備する。
  • テキスト書き出しの改行混在を調べ、ファイルを置き換える前に入出力のバイト数を比較する。
  • 既知の UTF-8 シグネチャだけを除去し、追加の先頭 U+FEFF と内部の U+FEFF を保持する。

使い方

  1. 1.文字をそのまま貼り付けるか、ローカルの UTF-8 ファイルを開きます。厳密なデコードで無効な UTF-8 と UTF-16/UTF-32 シグネチャを拒否します。BOM のないファイルも UTF-8 としてのみ解釈し、他の文字コードを推測しません。最初の EF BB BF だけをシグネチャとし、後続の U+FEFF は文字として保持します。
  2. 2.改行と BOM の方針を選んで解析します。区切り数、混在、論理行、UTF-16 単位、コードポイント、UTF-8 バイトを原文と比較してください。プレビューは元テキスト 2,000 単位、表示 12,000 文字までです。表示の省略は完全な結果を短くしません。
  3. 3.出力を明示的に確認してからコピーまたは保存します。UTF-8 ファイルは正確なバイトと選んだシグネチャを出力します。ASCII JSON は原文と結果の全文を含むため、元の個人情報を含むものとして扱ってください。入力や方針を変えると以前の確認は無効になります。 コピーは本文のみで、別管理のシグネチャを含みません。クリップボードや貼り付け先が改行を変える場合があります。正確なバイトには UTF-8 保存を使ってください。

正確な合成変換サンプル

混在を LF に統一

request (ASCII JSON): {"input":"A\r\nB\nC\rD","source":"paste","bom":false,"newline":"lf","bomPolicy":"preserve"}
{"text":"A\nB\nC\nD","bom":false,"crlf":0,"lf":3,"cr":0,"logicalLines":4,"utf16Units":7,"codePoints":7,"utf8Bytes":7}

3 種類の区切りが 3 個の LF になり、末尾の改行は増えません。

LF を CRLF にして署名を追加

request (ASCII JSON): {"input":"a\nb","source":"paste","bom":false,"newline":"crlf","bomPolicy":"add"}
{"text":"a\r\nb","bom":true,"crlf":1,"lf":0,"cr":0,"logicalLines":2,"utf16Units":4,"codePoints":4,"utf8Bytes":7}

CRLF 本文は 4 バイト、別のシグネチャは 3 バイトです。

旧形式 CR に変換

request (ASCII JSON): {"input":"a\r\nb\n","source":"paste","bom":false,"newline":"cr","bomPolicy":"remove"}
{"text":"a\rb\r","bom":false,"crlf":0,"lf":0,"cr":2,"logicalLines":3,"utf16Units":4,"codePoints":4,"utf8Bytes":4}

CRLF と LF がそれぞれ CR 1 個になり、既存の末尾区切りは残ります。

混在した本文を保持

request (ASCII JSON): {"input":"a\r\nb\rc\n","source":"paste","bom":false,"newline":"preserve","bomPolicy":"preserve"}
{"text":"a\r\nb\rc\n","bom":false,"crlf":1,"lf":1,"cr":1,"logicalLines":4,"utf16Units":7,"codePoints":7,"utf8Bytes":7}

末尾 LF と最後の空論理行も含め、各区切りを保持します。

ファイルシグネチャだけを除去

request (ASCII JSON): {"input":"\ufeffA\r\n","source":"file","bom":true,"newline":"lf","bomPolicy":"remove"}
{"text":"\ufeffA\n","bom":false,"crlf":0,"lf":1,"cr":0,"logicalLines":2,"utf16Units":3,"codePoints":3,"utf8Bytes":5}

シグネチャの後に文字の U+FEFF があるファイルです。シグネチャだけを除去します。

貼り付けの U+FEFF を保持

request (ASCII JSON): {"input":"\ufeffA","source":"paste","bom":false,"newline":"preserve","bomPolicy":"remove"}
{"text":"\ufeffA","bom":false,"crlf":0,"lf":0,"cr":0,"logicalLines":1,"utf16Units":2,"codePoints":2,"utf8Bytes":4}

貼り付け先頭の U+FEFF は文字なので、除去方針でも残ります。

Unicode 区切り文字を保持

request (ASCII JSON): {"input":"a\u0085b\u2028c\u2029d\n","source":"paste","bom":false,"newline":"crlf","bomPolicy":"preserve"}
{"text":"a\u0085b\u2028c\u2029d\r\n","bom":false,"crlf":1,"lf":0,"cr":0,"logicalLines":2,"utf16Units":9,"codePoints":9,"utf8Bytes":14}

末尾 LF だけを CRLF に変換。NEL・LS・PS は変えず、論理行も増やしません。

補助平面の絵文字を数える

request (ASCII JSON): {"input":"\ud83d\ude00\r\n","source":"paste","bom":false,"newline":"lf","bomPolicy":"preserve"}
{"text":"\ud83d\ude00\n","bom":false,"crlf":0,"lf":1,"cr":0,"logicalLines":2,"utf16Units":3,"codePoints":2,"utf8Bytes":5}

絵文字は UTF-16 で 2 単位、コードポイント 1 個、UTF-8 で 4 バイトです。

空文字にシグネチャを追加

request (ASCII JSON): {"input":"","source":"paste","bom":false,"newline":"lf","bomPolicy":"add"}
{"text":"","bom":true,"crlf":0,"lf":0,"cr":0,"logicalLines":0,"utf16Units":0,"codePoints":0,"utf8Bytes":3}

本文は空、論理行は 0 のまま、3 バイトのシグネチャだけを出力します。

単独サロゲートを JSON に保持

request (ASCII JSON): {"input":"A\ud800\r\n","source":"paste","bom":false,"newline":"lf","bomPolicy":"preserve"}
{"text":"A\ud800\n","bom":false,"crlf":0,"lf":1,"cr":0,"logicalLines":2,"utf16Units":3,"codePoints":3,"utf8Bytes":null}

UTF-8 の直接出力を拒否しますが、ASCII JSON は U+D800 単位を正確に保持します。

エスケープの綴りを文字として保持

request (ASCII JSON): {"input":"a\\r\\nb","source":"paste","bom":false,"newline":"lf","bomPolicy":"preserve"}
{"text":"a\\r\\nb","bom":false,"crlf":0,"lf":0,"cr":0,"logicalLines":1,"utf16Units":6,"codePoints":6,"utf8Bytes":6}

バックスラッシュ付きの綴りは普通の ASCII 文字であり、評価しません。

改行と BOM のよくある誤解

  • CRLF を 2 個の改行と数える。
  • 貼り付け先頭の U+FEFF をすべて除去可能なメタデータと扱う。
  • 見た目の一致をバイトの一致と考え、コピーが改行を保持すると決めつける。
  • 同じバイト数なら同じ文字列だと思う。
  • NEL・LS・PS が自動で LF になると期待する。
  • ASCII レポートを匿名化済みだと思って共有する。

制限と注意事項

  • 変換対象は CRLF、LF、CR だけで、CRLF は区切り 1 個です。NEL(U+0085)、LS(U+2028)、PS(U+2029)、空白、タブなどは保持します。空文字は論理行 0、空でなければ区切り数 + 1 で、末尾の区切りによる空行を含みます。末尾の改行を追加・削除しません。
  • BOM 方針は 3 バイトの UTF-8 ファイルシグネチャ 1 個の保持・追加・除去です。文字の U+FEFF は削除しません。貼り付けの U+FEFF は文字であり、元ファイルの文字コードやシグネチャは復元できません。先頭の文字 U+FEFF の前にシグネチャを追加すると EF BB BF が意図的に 2 組になります。ブラウザーやクリップボードが改行を変える場合があります。 出力の文字列が U+FEFF で始まります。別のシグネチャを追加しなくても UTF-8 バイトは EF BB BF で始まり、他のデコーダーがシグネチャとして消費する場合があります。そのバイトを除去すると保持した文字も消えます。
  • UTF-8 バイト数には別管理のシグネチャを含みます。UTF-16 単位とコードポイントは本文のみです。補助平面の文字は UTF-16 の 2 単位でコードポイント 1 個です。コードポイントは書記素クラスタや表示幅とは異なります。単独サロゲートは診断用に保持して不正なコードポイント 1 個と数えますが、UTF-8 長はありません。U+FFFD に置き換えず直接出力を拒否します。
  • 上限は入力 100,000 UTF-16 単位、ファイル 400,003 バイト、出力 200,000 単位と 800,003 バイト、ASCII レポート 2,000,000 文字です。超過は明示的なエラーとし、不完全な保存を行いません。ローカル処理のみで、アップロード、通信、永続保存、テキスト実行はありません。文字コード判定、Unicode 正規化、空白整理、安全性の検証ツールではありません。
  • ASCII JSON は単独サロゲートを含めて原文と出力の全 UTF-16 単位を無損失で保持します。エスケープは可逆の表現であり、匿名化や暗号化ではありません。レポートに全文と秘密情報が含まれる可能性があります。UTF-16・UTF-32 ファイルは別の明示的な文字コード変換後に読み込んでください。

よくある質問

BOM を除去すると U+FEFF がすべて消えますか?

いいえ。ファイル先頭の最初の EF BB BF だけをメタデータとします。それ以降の先頭や内部の U+FEFF は文字として保持します。貼り付けの U+FEFF は位置に関係なく文字です。 出力の文字列が U+FEFF で始まります。別のシグネチャを追加しなくても UTF-8 バイトは EF BB BF で始まり、他のデコーダーがシグネチャとして消費する場合があります。そのバイトを除去すると保持した文字も消えます。

保持で貼り付け時に変わった改行を復元できますか?

できません。実際に受け取った文字列を保持します。ブラウザーやクリップボードが既に変えた可能性があります。正確な入力バイトには元の UTF-8 ファイルを読み込んでください。

末尾に改行があると論理行が増えるのはなぜですか?

CRLF・LF・CR で区切った各部分を数えるため、末尾の区切りは空の部分を作ります。空文字だけは特別に 0 行とします。

任意の文字コードを変換できますか?

できません。無効な UTF-8 と UTF-16/UTF-32 シグネチャは拒否します。BOM のないバイト列も厳密な UTF-8 デコードが必要です。成功しても作成者が意図した文字コードを証明するものではありません。

関連ツール