空行と字下げが消えないSNS投稿を作る
SNS改行・空白変換ツールは、文章の中の空行、行頭の字下げ、行の途中の連続スペースを、空白の整理で消えにくい文字に置き換えます。初期設定では、空行ごとに点字の空白(U+2800)を1個入れ、字下げと連続スペースは半角スペース2個を点字の空白1個に変えます。点字の空白は画面上では空白に見えますが、Unicodeでは空白文字に分類されていないため、空白を削除する整理を通っても残る可能性が高い文字です。
上の作業エリアで「元の文章」の欄に文章を入れると、右側の投稿プレビューがすぐに変わります。プレビュー上部のそのまま貼るとを押すと、空白を整理するアプリに元の文章をそのまま貼ったときに消える行がつぶれ、変換して貼るとを押すとその行が元に戻ります。入れた見えない文字は斜線で示され、下のバーにはInstagram・Threads・X・TikTokの文字数上限のうち見えない文字が占める分が表示されます。空白文字を1文字だけ使いたいときは、いちばん下の空白文字ボックスから押してコピーできます。
空行が消える理由と、このツールが役立つ場面
文章を受け取るプログラムは、保存や表示の前に空白を整理することがよくあります。Webページの標準ルール(CSS)は、半角スペース(U+0020)・タブ・改行だけを1つにまとめ、ノーブレークスペースや全角スペースなどほかの空白はまとめません。一方、JavaScriptのtrimのように行頭と行末の空白を削除する関数は、ノーブレークスペースや全角スペースなどUnicodeの空白(Zs)も削除します。行頭と行末の空白を削除すると字下げが消え、空行まで削除するアプリでは、何もない行や空白だけの行も消えます。
そのため、空行には空白ではない文字を1つ入れておく必要があります。このツールが役立つのは、おもに次のような場面です。
- キャプションの段落分け: 写真の説明、レビュー、お知らせなどの長い文章で、段落の間に空行を入れて読みやすくしたいときに使います。
- プロフィール文の行頭をそろえる: 自己紹介を少し字下げしたり、中央寄りに置いたりしたいときに、字下げを保ちます。
- 字下げした箇条書き: 持ち物、手順、メニューなど、下の項目を字下げした箇条書きが1行につぶれないようにします。
- ハッシュタグを本文から離す: 本文とハッシュタグのかたまりの間に空行を複数入れて、本文が先に目に入るようにしたいときに使います。
- 見えない文字を1文字だけ使う: 名前欄や行頭のように、見えない文字が1つ必要なときは、空白文字ボックスからコピーします。
使い方
- 「元の文章」の欄に、SNSに投稿したい文章を貼り付けます。空行・字下げ・連続スペースはいつも通りのままで大丈夫です。
- 設定の表で変換したい対象を選びます。空行の行では空行を残すかと入れる文字を、スペースの行では字下げ・連続スペースを残すかとスペースの文字を選びます。最初はすべてオンで、文字は点字の空白です。
- プレビューでそのまま貼るとと変換して貼るとを切り替え、消えていた行が残るかを確かめます。スペースの文字に空白文字を選ぶと、整理で消えるかもしれない行数が警告として表示されます。
- 文字数のバーで、投稿先の上限を超えていないかを見ます。超えるとバーと数字が強調色に変わります。
- 結果をコピーを押してSNSの入力欄に貼り付け、投稿する前にそのアプリのプレビューでもう一度確認します。
変換のルール
変換は行ごとに行います。スペースの数え方は、半角スペースやノーブレークスペースなどの空白文字1個を1、全角スペース1個を2、タブ1個を4とします。このツールは点字の空白と全角スペース1個を2、ノーブレークスペース1個を1として計算します。実際の幅はフォントによって異なり、空白文字ボックスにはこの画面で測った幅が表示されます。
| 対象 | 判定の基準 | 変換方法 | 例 |
|---|---|---|---|
| 空行 | 空、または空白文字だけの行 | 空行用の文字が1個だけの行に | 空行 → ⠀ |
| 行頭の字下げ | 行の先頭にあるスペース | スペース数 ÷ 2(切り上げ)個の点字の空白 | 半角スペース4個 → ⠀⠀ |
| 行の途中の連続スペース | 文字と文字の間に2個以上のスペース | (スペース数 − 1) ÷ 2(切り上げ)個の点字の空白 + 半角スペース1個 | 半角スペース4個 → ⠀⠀␣ |
| 行末の空白 | 行の最後の文字より後ろの空白 | 削除 | 見えない末尾を整理 |
| 先頭・末尾の空行 | 文章全体の最初と最後 | 除去 | コピーで紛れ込んだ行を整理 |
| 変換済みのスペース | 選んだスペースの文字だけでできた部分 | そのまま | 2回変換しても同じ結果 |
行の途中の連続スペースで最後の1つを半角スペースとして残すのは、ハッシュタグとメンションのためです。TikTokの開発ドキュメントには、キャプションのハッシュタグ(#)とメンション(@)は空白または改行で区切られると書かれています。「#秋」と「#散歩」の間の空白をすべて見えない文字にすると、2つのタグが1つにつながって読まれるおそれがあるため、見えない文字の後ろに半角スペースを1個残します。ノーブレークスペース(U+00A0)を選ぶと、行頭のスペースn個はノーブレークスペースn個に、行の途中のn個はノーブレークスペースn−1個と半角スペース1個に置き換わります。全角スペースを選ぶと、点字の空白と同じく2を1個として計算します。
日本語の入力では、字下げのために全角スペースを入れている文章も多くあります。このツールは全角スペース1個を半角スペース2個分として数えるので、全角スペースの字下げも半角スペースの字下げも、同じ幅の点字の空白に置き換わります。
空白文字10種の比較
下の表は、空白文字ボックスにある10種をUnicode 18.0の文字データで整理したものです。空白文字はUnicodeのWhite_Space属性を持つという意味で、既定で無視する文字はDefault_Ignorable_Code_Point属性のことで、対応していない環境では描画せずに読み飛ばすと定められた文字です。幅は文字一覧の説明で、実際の幅はフォントによって変わります。
| 文字 | コード | 分類 | 空白文字 | 既定で無視 | Xの文字数 | 幅(文字一覧の説明) |
|---|---|---|---|---|---|---|
| 点字の空白 | U+2800 | 記号(So) | いいえ | いいえ | 2 | 多くのフォントで固定幅の空白、空白としては働かない |
| ハングルフィラー | U+3164 | 文字(Lo) | いいえ | はい | 2 | フォントによって異なる(ハングル用フォントでは広い空白が多い) |
| ゼロ幅スペース | U+200B | 書式(Cf) | いいえ | はい | 1 | 幅なし、改行位置の目印用 |
| ノーブレークスペース | U+00A0 | 空白(Zs) | はい | いいえ | 1 | 通常のスペースと同じ幅 |
| 全角スペース | U+3000 | 空白(Zs) | はい | いいえ | 2 | CJKの文字1字分の幅(広い空白) |
| emスペース | U+2003 | 空白(Zs) | はい | いいえ | 1 | 文字サイズと同じ幅(1em) |
| enスペース | U+2002 | 空白(Zs) | はい | いいえ | 1 | emの半分 |
| 数字幅スペース | U+2007 | 空白(Zs) | はい | いいえ | 1 | 数字の0と同じ幅 |
| 細いスペース | U+2009 | 空白(Zs) | はい | いいえ | 1 | 1/5〜1/6 em |
| 極細スペース | U+200A | 空白(Zs) | はい | いいえ | 1 | 1/10〜1/16 em |
表の中で、空白文字でも既定で無視する文字でもないのは点字の空白だけです。このツールが空行とスペースの初期の文字を点字の空白にしている理由です。ノーブレークスペース・enスペース・極細スペースを交互に入れる方法では、3つの文字の幅が互いに違うためスペースの幅がそろわず、3つとも空白文字なので行頭や行末の整理でまとめて消えてしまいます。
整理の方式ごとに残る文字
アプリが空白をどう整理しているかは、ほとんど公開されていません。ただ、整理に使われる代表的なルールは標準の文書に定められているので、どの文字がどの整理で残るかは前もって分かります。
| 整理の方式 | 削除する・まとめるもの | 残るもの(ボックスの10種のうち) |
|---|---|---|
| 画面上の空白のまとめ(CSS) | 半角スペース(U+0020)・タブ・改行だけを1つにまとめる | 10種すべて |
| 行頭・行末の空白の削除(JavaScript trim) | Unicodeの空白文字(Zs全体)とタブ・BOM | 点字の空白・ハングルフィラー・ゼロ幅スペース |
| 空白の判定(Java isWhitespace) | 空白文字のうちノーブレークスペース(U+00A0・U+2007・U+202F)を除いて判定 | 点字の空白・ハングルフィラー・ゼロ幅スペース・ノーブレークスペース・数字幅スペース |
| 見えない文字のフィルタ | 既定で無視する文字(U+200B・U+3164など) | 点字の空白と空白文字 |
同じ「空白の削除」でも、プログラミング言語によって空白の範囲が違います。JavaScriptはノーブレークスペースまで空白とみなしますが、JavaのCharacter.isWhitespaceはノーブレークスペースを空白から除きます。そのため、ノーブレークスペースで字下げした文章は、アプリによって残ったり消えたりします。プレビューのそのまま貼るとと変換して貼るとは、このうちもっとも多く消すケース、つまり行頭と行末の空白文字を削除し、連続する空白を1つにまとめ、空行を消すアプリを想定して描いています。
文字数の上限と見えない文字
見えない文字も文字数に含まれます。下の表は、各プラットフォームの公開ドキュメントに書かれた上限と数え方です。Instagramのドキュメントは単位を書いていないため、このツールはUnicodeの文字(コードポイント)の数で数えます。
| 投稿先 | 上限 | 数え方 | 点字の空白1個 |
|---|---|---|---|
| Instagramキャプション | 2,200 | 最大2,200字・ハッシュタグ30個・@タグ20個(単位の記載なし) | 1字 |
| Threads投稿 | 500 | 500字、絵文字はUTF-8のバイト数で数える | 1字 |
| X投稿 | 280 | コードポイント0〜4351・8192〜8205・8208〜8223・8242〜8247は1字、それ以外は2字、絵文字は2字、リンクは23字 | 2字 |
| TikTokキャプション | 2,200 | UTF-16の単位 | 1字 |
Xで日本語(かな・漢字)が2字として数えられるのと同じ理由で、点字の空白(U+2800 = 10240)も2字です。ゼロ幅スペース(U+200B = 8203)は8192〜8205の範囲なので1字、ノーブレークスペース(U+00A0 = 160)も1字です。初期の例文「散歩の記録」を変換すると見えない文字が8個入ります。Instagramなどの文字数では、空行3つに点字の空白が3字増える一方、字下げと連続スペースの置き換えで2字減るため、75字が76字になります。Xの基準では121字から129字に増えます。
例: 散歩の記録の投稿
作業エリアに最初から入っている例文を、初期設定で変換した結果です。斜線の枠1つが点字の空白1個で、␣は半角スペースです。「そのまま貼ると」の列は、行頭と行末の空白を削除し、連続する空白を1つにまとめ、空行を消すアプリを想定した表示です。6行目の行頭には全角スペースが1個入っています。
| 行 | 元の文章 | 変換結果 | そのまま貼ると |
|---|---|---|---|
| 1 | 秋の散歩メモ | そのまま | そのまま |
| 2〜3 | 空行2つ | ⠀ の行が2つ | 消える |
| 4 | 今日は少し遠くまで歩きました。 | そのまま | そのまま |
| 5 | ␣␣・歩数 12,400歩 | ⠀・歩数 12,400歩 | 字下げが消える |
| 6 | (全角スペース1個)・時間 1時間40分 | ⠀・時間 1時間40分 | 字下げが消える |
| 7 | 空行 | ⠀ | 消える |
| 8 | 風が␣␣␣␣気持ちよかった日。 #秋␣␣#散歩 | 風が⠀⠀␣気持ちよかった日。 #秋⠀␣#散歩 | 空白が1個ずつに |
そのまま貼ると8行が5行に減り、箇条書きの字下げも消えますが、変換した文章は8行と字下げがそのまま残ります。スペースの文字をノーブレークスペースに変えると、5・6行目の行頭と8行目の連続スペースが空白文字で埋まるため、同じ整理を通ると再び消えます。
よくある失敗
- 空行に半角スペースだけを入れる: スペースキーを何回か押した行は空白だけの行なので、整理で本物の空行と同じように消えます。
- ノーブレークスペースで字下げする: 見た目はいちばん近くなりますが、空白文字なので行頭の整理で消えるおそれがあります。警告が出たら点字の空白に変えてください。
- ハッシュタグの間をすべて見えない文字にする: タグを区切る空白がなくなり、2つのタグがくっつくことがあります。このツールは最後の1つを半角スペースとして残します。
- 文章の最後に空行を残す: 末尾の空行に見えない文字を入れると、見えない尻尾ができます。このツールは先頭と末尾の空行を取り除きます。
- 変換した文章を直してからそのまま投稿する: アプリの入力欄で空行を新しく入れると、その行はふつうの空行に戻っています。直した文章は元の文章の欄に入れ直して変換してください。
- Xの上限をInstagramの基準で計算する: Xはかな・漢字も点字の空白も2字で数えます。文字数バーでXの行を別に確認してください。
限界
- アプリが空白をどう整理するかは公開されておらず、アップデートで変わることもあります。プレビューはもっとも多く消すケースを想定したモデルで、特定のアプリの画面をそのまま再現するものではありません。
- 点字の空白とハングルフィラーの幅はフォントが決めます。空白文字ボックスの幅は、いま見ている画面のフォントで測った値なので、ほかの端末では違う場合があります。
- 点字の空白はUnicodeでは点字の記号です。スクリーンリーダーがこの文字を名前で読み上げたり、検索で文字として扱われたりすることがあるため、長い文章全体に多く入れるのは避けたほうが安心です。
- 見えない文字だけの名前や投稿を認めないサービスがあります。空白文字ボックスの文字を名前欄に使う前に、そのサービスの規約を確認してください。
- 文字数の上限は、2026年10月21日に確認した公開ドキュメントの基準です。アプリ画面の上限がドキュメントと違う場合があり、Instagramのドキュメントは数える単位を書いていません。
- このツールはhttp://またはhttps://で始まるアドレスだけをリンクとみなし、Xの基準で23字と数えます。Xではroberin.comのようにドメインだけを書いた場合もリンクになり、23字と数えられることがあります。
出典
基準: 文字の属性はUnicode 18.0の文字データ、空白整理のルールはECMAScript・CSS Text 3・Java SE 21のドキュメント、文字数の上限は各プラットフォームの開発ドキュメントで、2026年10月21日に確認しました。
- 01Unicode 18.0 — PropList.txtWhite_Space属性: U+0020・U+00A0・U+2000〜200A・U+3000など。U+200B・U+2800・U+3164は含まれない
- 02Unicode 18.0 — DerivedCoreProperties.txtDefault_Ignorable_Code_Point: U+200B・U+3164を含み、U+2800は含まない
- 03Unicode 18.0 — NamesList.txtU+2800は「多くのフォントで固定幅の空白として描かれるが、空白としては働かない」、U+00A0・U+2002・U+2009・U+200Aの幅の説明
- 04Unicode Standard Annex #44 — Unicode Character Database既定で無視する文字: 対応していなければ描画せずに読み飛ばすと定められた範囲
- 05ECMAScript Language Specification — White SpaceWhiteSpace = TAB・VT・FF・ZWNBSP・Zs全体。String.prototype.trimが削除する範囲
- 06CSS Text Module Level 3 — 4.1 White Space Processing Rules空白の処理はU+0020・U+0009・改行にだけ適用される
- 07Java SE 21 — Character.isWhitespace空白文字のうちU+00A0・U+2007・U+202Fは空白とみなさない
- 08Meta — Instagram Graph API, IG User Mediacaption: 最大2,200字、ハッシュタグ30個、@タグ20個
- 09Meta — Threads API, Postsテキスト投稿は500字、絵文字はUTF-8のバイト数で計算
- 10X — Counting characters280字、絵文字は2字、リンクは23字、CJKの文字は2字
- 11twitter-text — config/v3.json重み1の範囲は0〜4351・8192〜8205・8208〜8223・8242〜8247、それ以外は2
- 12TikTok — Content Posting API, Direct Posttitle(キャプション)は最大2,200 UTF-16単位、ハッシュタグ・メンションは空白・改行で区切られる
よくある質問
Instagramに投稿すると、空行が消えてしまうのはなぜですか?
多くのアプリは、文章を保存したり表示したりするときに、行頭と行末の空白を削除し、連続する空白を1つにまとめます。何もない行や空白だけの行は、この整理で空行として扱われて消えることがあります。空行に空白文字ではない点字の空白(U+2800)を1つ入れると、その行は文字のある行になり、残る可能性が高くなります。アプリの実際の処理は公開されていないので、投稿する前にプレビューで確認してください。
点字の空白(U+2800)とハングルフィラー(U+3164)は何が違いますか?
点字の空白はUnicodeで記号(So)に分類され、空白文字でも既定で無視する文字でもありません。Unicodeの文字一覧には、多くのフォントで幅のある空白として描かれるが、空白としては働かないと書かれています。ハングルフィラーは文字(Lo)に分類されますが、既定で無視する文字なので、見えない文字を取り除くサービスでは消えたり弾かれたりすることがあります。
ノーブレークスペースを選ぶと警告が出るのはなぜですか?
ノーブレークスペース(U+00A0)は通常のスペースと同じ幅で見た目はいちばん近いのですが、Unicodeの空白文字(White_Space)に含まれます。そのため、JavaScriptのtrimのように行頭と行末の空白を削除する整理を通ると字下げが消え、連続する空白を1つにまとめる整理では連続スペースが1個になります。このおそれを知らせるために警告を出し、押すと点字の空白に切り替えます。
見えない文字を入れると、文字数は増えますか?
増えることがあります。空行1つにつき1字が加わりますが、字下げは半角スペース2個が点字の空白1個になるため、かえって減る場合もあります。Xは文字ごとに重みを付けていて、U+2800・U+3164・U+3000は2字、U+200B・U+00A0は1字として数えます。下の文字数バーの斜線が、入れた見えない文字の分です。
ハッシュタグの間に空けたスペースはどうなりますか?
行の途中の連続スペースを変換するとき、最後の1つは半角スペースとして残します。たとえば「#秋」と「#散歩」の間の半角スペース2個は、点字の空白1個と半角スペース1個になります。ハッシュタグとメンションは空白または改行で区切られるため、空白をすべて見えない文字にすると2つのタグがくっつくおそれがあるからです。
見えない文字を1個だけコピーするにはどうすればいいですか?
作業エリアの下にある空白文字ボックスで使いたい文字を押すと、その文字が1個コピーされます。各ボックスには、画面のフォントで測った幅、空白の整理で残るか、見えない文字の整理で消えるか、Xで何字に数えられるかが書かれています。ニックネームなど、空に見える名前を認めないサービスもあるので、先にそのサービスの規約を確認してください。
一度変換した文章をもう一度入れても大丈夫ですか?
大丈夫です。選んだスペースの文字だけでできた部分や点字の空白のような文字は二度変換されないので、同じ設定で2回変換しても結果は同じです。変換した文章を直す途中で空行や空白を新しく入れた場合は、その部分だけがもう一度変換されます。
入力した文章はどこかに保存されますか?
保存されません。変換と文字数の計算はすべてこのブラウザの中で行い、文章をサーバーに送ったり、アドレスや保存領域に残したりしません。貼り付けボタンは、ブラウザが許可したときだけクリップボードを読み取ります。