メインコンテンツへ移動

テキストをバイナリに

このコンバータは、任意のテキストの背後にあるUTF-8バイトを8ビットのバイナリグループとして表示し、逆方向にも同様に簡単に切り替えます。ASCII文字は1バイト、絵文字は4バイトを取ります。デコードでは、8ビットの倍数でないか、有効なUTF-8でない入力は拒否されます。すべてはお使いのブラウザ内でローカルで動作します。

端末内で処理

テキストをバイナリにとは

文字にはバイナリというものはありません:ビットはバイトを記述し、バイトはエンコーディングに依存します。このツールは、ウェブが採用したエンコーディング—RFC 3629によるUTF-8—を表示します。UTF-8では、aから🙂までのすべての文字が1から4バイトで、8ビットのグループとしてレンダリングされます。

エンコーディングは自己記述型です:最初のバイトが長さを示します。0で始まるバイトはASCIIの1バイトです;110で始まる場合は2バイト;1110で始まる場合は3バイト;11110で始まる場合は4バイト;すべての継続バイトは10で始まります。この1つのルールを覚えれば、出力が読めるようになります。

方向の切り替えでデコードに戻ります:ビットを貼り付け、テキストを取得します。デコードは意図的に厳密です—バイト数がバイトの整数倍でない場合、またはUTF-8の継続ルールを破るバイトの場合は、置換文字にデコードされるのではなく拒否されます。変換はこのタブ内で行われ、何もアップロードされません。

生のビットは表示用です;それらのバイトがテキスト専用チャネルを通過する必要がある場合、base64は標準的なラッパーであり、Base64解説ガイドでなぜそのように設計されたのかを説明します。

バイナリは冗長です(1バイトにつき8文字)。Base64と16進数の比較で、なぜ16進法が通常は紙の上で有利なのか、2つの表記法がどう関係するのかを示します。

テキストがビットになる仕組み

コンバータはテキストをブラウザの独自のTextEncoderに渡し、UTF-8バイトを直接出力します。これは絵文字にとって重要です:JavaScript文字列は🙂を2つのサロゲート halvesとして保存しますが、エンコーダはコードポイントで動作するため、4バイトのシーケンスを生成します。各バイトは正確に8ビットにパッドされ、グループ化されます—デフォルトでは1行に8バイトです。

  • エンコード:文字列はTextEncoderを介してUTF-8バイトになります—BOMも、ロケール依存もありません。
  • レンダリング:各バイトは8ビットとして書き込まれ、ゼロでパッドされます—0x48は01001000で、1001000ではありません。
  • グループ化:バイトはスペースで区切られ、改行で行が区切られ、選択したグループ化で行われます。
  • デコード:逆経路はすべての非01文字を削除し、バイトを再構成し、厳密なUTF-8をデコードします。

出力の読み方:先頭バイトが長さを教えてくれる

UTF-8の設計目標はASCII互換性にあり、そのパターンがそれを示しています。ASCIIはおなじみの1バイトコードを保持します—01000001は両方でAです—一方、より長いシーケンスはリードバイトと継続バイトを固定パターンで構築されます:

  • é (U+00E9)は11000011 10101001です—2バイトのリードと1つの継続。
  • 🙂 (U+1F642)は11110000 10011111 10011001 10000010です—4バイト形式。
  • 孤立した10接頭辞のバイトはリードのない継続です—典型的な破損のサイン。
コードポイント範囲バイト数パターン
U+0000 – U+007F (ASCII)10xxxxxxx
U+0080 – U+07FF2110xxxxx 10xxxxxx
U+0800 – U+FFFF31110xxxx 10xxxxxx 10xxxxxx
U+10000 – U+10FFFF (絵文字はここに)411110xxx 10xxxxxx 10xxxxxx 10xxxxxx

デコードが拒否するものとその理由

デコードは意図的に雑なフォーマットを受け入れます:スペース、コンマ、改行は解析前に削除されます。2つの拒否が残ります:8の倍数でないビット数はバイトに分割できません—エラーは正確なカウントを報告します—そして上記のパターンを破るバイトは、U+FFFDに置換されるのではなく、致命的なUTF-8デコーダによって拒否されます。

2つ目の拒否は午後を節約します:寛容なデコーダは壊れたシーケンスを、見た目は plausible で静かに間違っている�の文字列に変換します。拒否とは、原因を調査してから出荷するという意味です。

8ビットグループが他の場面で現れる場所

ネットワーキングではバイトをオクテットと呼びます:IPv4アドレスは10進数で4つのグループで、サブネットマスクは同じ32ビットにわたって1の後に0が続きます。バイナリビューは文字化け—mojibake—も説明します:UTF-8でのéは11000011 10101001で、Latin-1として誤って読むと、それらのバイトはÃと©になり、UTF-8が間違ったエンコーディングでデコードされたときに見るéパターンになります。バイトを確認することが最速の診断です。

よくある質問

テキストをバイナリに変換すると何かアップロードされますか?

いいえ。バイトはブラウザの組み込みTextEncoderから来て、デコードはTextDecoderからです—両方ともこのタブ内で、変換中にリクエストは行われません。DevToolsのネットワークパネルがそれを確認します。ページはconnect-src 'self'で提供されるため、ブラウザはスクリプトが試みたすべての発信呼び出しを拒否します。

文字のバイナリ形式は常に同じですか?

いいえ—エンコーディングに依存します。éはUTF-8では2バイト(11000011 10101001)、Latin-1では1バイト(11101001)です。このツールは常にUTF-8—RFC 3629によるウェブの標準—を使用し、ブラウザが送信するものとほとんどのファイル形式が想定するものに一致します。

UTF-8では絵文字は何ビット取りますか?

ほとんどは4バイト—32ビット—取ります。なぜなら、それらはU+10000より上にあり、UTF-8は11110xxxリードバイトと3つの継続でエンコードする範囲だからです。☺のようないくつかの古い記号はU+10000より下にあり、3バイト取ります。ASCIIはもう一方の極端です:文字あたり1バイトです。

なぜデコードが8の倍数ではないと拒否されましたか?

ビットは8のグループで完結したときにバイトになります;余りがあるとは、何かが欠けているか余分である—切り捨てられた貼り付け、行のドロップ、余分な数字—ことを意味します。エラーは正確なビット数を示します。フォーマットが原因になることはありません:スペースと改行はカウントの前に削除されます。

デコードで「無効なUTF-8」エラーは何を意味しますか?

バイトがUTF-8の契約を破りました:リードのない継続バイト、シーケンスの最後で切られるマルチバイトシーケンス、または不可能なパターンです。ツールは致命的にデコードします—U+FFFDマークに置換するのではなく拒否します—なぜなら、静かに文字化けされた出力はエラーより悪いからです。Latin-1テキストのように、元々UTF-8ではなかったデータは、意図的にこれを引き起こします。

スペースや改行を含むバイナリを貼り付けられますか?

はい。0または1でないすべての文字は解析前に削除されるため、グループ化されたスペース、1バイトずつのダンプ、コンマ区切りのリストのすべてが解析されます。数字自体が破損している場合、厳密なデコードがそれを捕捉します—フォーマットは許容されますが、データは許容されません。