テキスト→Unicode変換

テキストを Unicode コードポイント・HTML エンティティ・JavaScript エスケープへ変換し、逆変換も可能。追加面の文字や絵文字にも完全対応。

テキストと Unicode コードポイントを相互変換します。 HTML エンティティ、JavaScript エスケープ、U+ 表記から選べます。両方のパネルが編集可能で、基本多言語面の外にある文字(すべての絵文字を含む)はサロゲートペアではなく単一のコードポイントとして扱われます。

コードポイント、符号化、サロゲートペア

コードポイントはバイトではない

Unicode はすべての文字にコードポイントと呼ばれる番号を割り当て、U+ に続けて16進数で表記します。A は U+0041、 は U+8702、ミツバチの絵文字は U+1F41D です。この番号が文字の identity です。どう保存するか(UTF-8、UTF-16、UTF-32)は別の判断であり、本ツールが「テキスト→2進数」と異なるのはこの点です。

サロゲートペアの落とし穴

JavaScript の文字列は UTF-16 です。U+FFFF を超えるコードポイントは、サロゲートペアと呼ばれる 16 ビット 2 つに分けて格納されます。charCodeAt で素朴にループするコードは、絵文字を 0xD800〜0xDFFF の意味のない 2 値として認識し、"🐝".length を 2 と報告します。本ツールはコードポイント単位で反復するため、ミツバチの絵文字は U+1F41D という 1 つの値になります。

4 つの出力形式

  • HTML 10進エンティティA。あらゆる HTML 文書と XML で機能します。
  • HTML 16進エンティティA。同じ内容を16進で表したもので、Unicode の一覧表の表記に合わせた形式です。
  • JavaScript エスケープ\u0041。ソースコード中の文字列リテラル向け。U+FFFF を超える場合は波括弧形式 \u{1F41D} が必要で、本ツールは自動で出力します。
  • コードポイント表記U+0041。仕様書やドキュメントで使われる形式です。

実用的な使い道

非 ASCII テキストをエンティティに変換しておくと、古いメールゲートウェイや設定の誤ったデータベースなど、文字コードを壊すシステムを通しても内容が保たれます。コードポイントの確認は、不可視文字を突き止める最速の方法でもあります。ゼロ幅スペース(U+200B)やノーブレークスペース(U+00A0)は画面上では通常の空白と区別できませんが、文字列比較を失敗させます。疑わしいテキストを貼り付ければ違いがすぐ分かります。

オープンソースに関する記載:JavaScript ネイティブの String.prototype.codePointAt と String.fromCodePoint で実装しています。サードパーティライブラリは使用していません。

よくある質問

絵文字が 2 つではなく U+1F41D 1 つになるのはなぜですか?
本ツールは UTF-16 のコード単位ではなくコードポイント単位で反復するためです。絵文字は U+FFFF を超えるため素朴な文字ループではサロゲートペアに分割されますが、本ツールでは分割されません。
「テキスト→2進数」との違いは何ですか?
本ツールは各文字の抽象的な identity であるコードポイントを表示します。2進数ツールはそれを保存する UTF-8 バイトを表示します。1 文字がコードポイント 1 つでもバイトは 3 つということがあります。
複数の形式が混在していても復号できますか?
できます。&#..;、&#x..;、\uXXXX、\u{...}、U+.... を同一入力内で認識し、エスケープの間にある文字はそのまま保持されます。
文字列の不可視文字を見つけるには?
貼り付けて U+ 表記に切り替えてください。ゼロ幅スペースは U+200B、ノーブレークスペースは U+00A0、BOM は U+FEFF として表示されます。
HTML エンティティはそのままページに入れて安全ですか?
はい、数値文字参照は HTML でも XML でも有効です。ただしエスケープされるのは文字自体だけで、信頼できない内容の <、>、& を適切に HTML エスケープする処理の代わりにはなりません。
データがブラウザの外に出ますか?
出ません。変換はローカルでの文字列処理のみです。