ツール
ガイド

16進数 / ASCII / Unicode

エンコード

テキスト、UTF-8 の16進バイト、Unicode コードポイントを相互変換します。

100% クライアントサイド バックエンドなし
テキスト
16進数 (UTF-8)
コードポイント
このページの内容

16 進数 / ASCII / Unicode 変換とは?#

同じテキストの断片を、3 つの本質的に異なる方法で書き表せます。このツールは 3 つすべてを一度に確認できます:

  • テキスト — あなたが打ち込み、読むようなリテラルの文字(Hello 世界 🌍)。
  • 16 進バイト — 16 進数で表された生の UTF-8 バイトシーケンス、1 バイトを 2 桁で(48 65 6C 6C 6F 20 ...)。これが実際にネットワークを流れ、ファイルに置かれるものです。
  • コードポイント — Unicode スカラー値、文字ごとに 1 つの U+XXXX(U+0048 U+0065 ... U+1F30D)。これは Unicode 自身が文字に番号を振る方法であり、バイトエンコードに依存しません。

これら 3 つの見方が重要な理由は、ASCII を離れると長さが同じではなくなるからです——そして、それがテキストエンコードに関する他の何よりも多くの混乱の源です。1 つの文字は 1 つのコードポイントですが、UTF-8 では 1 〜 4 バイトを占めることがあります。地球の絵文字 🌍 は 1 文字(U+1F30D)ですが、UTF-8 では4 バイト(F0 9F 8C 8D)です。文字列長を数え間違えたこと、データベースに「長すぎる」と文字列を拒否されたこと、部分文字列のスライスが文字の途中に落ちたことがあるなら、あなたはすでにこのギャップに出会っています。

3 つの表現のいずれかを編集すると、残り 2 つが即座に導出されます。パーサーは寛容です: 16 進入力はスペース、コロン、ダッシュ、0x プレフィックスを受け付けます。コードポイント入力は U+、\u、0x、または裸の 16 進を受け付け、スペース、カンマ、セミコロンで区切ります。

使い方#

  1. 入力ボックスの上のモードセレクターで、入力しているものを宣言します: テキスト、16 進数 (UTF-8)、コードポイント。
  2. 入力ボックスに貼り付けるか編集します。他の 2 つのビューは右側に自動的に埋まります。
  3. 3 つの結果フィールドのいずれかの横のコピーを使って、その表現を取り出します。
  4. サンプルは Hello 世界 🌍 を読み込み、ASCII、CJK、絵文字がそれぞれどう異なる形に対応するかを見せます。クリアはすべてを空にします。

主な特徴#

  • 3 つのビュー、1 つの真実のソース。 手元にある表現をどれでも編集でき、他は計算され、手作業で維持されることはありません。
  • Latin-1 ではなく UTF-8 バイト。 16 進出力は、ほぼすべてのモダンなシステムが使う、実際の通信上の UTF-8 バイトシーケンスです——レガシー の 1 文字 1 バイトの想定ではありません。
  • astral 文字を含めコードポイント対応。 for...of 反復により、絵文字は 2 つのサロゲート半片ではなく 1 つのコードポイントとして数えられるため、U+1F30D が見え——D83C DF0D では決してありません。
  • 戻り方向は厳密。 有効な UTF-8 を形成しない 16 進バイト(奇数長の文字列、遊離した継続バイト)は、文字化けテキストにデコードされるのではなく、明確なエラーで報告されます。有効範囲外のコードポイントや、単独サロゲート(U+D800〜U+DFFF)は拒否されます。

実例#

サンプルを読み込んで Hello 世界 🌍 を得ると、3 つの導出ビューは次のとおりです:

Text:       Hello 世界 🌍
Hex bytes:  48 65 6C 6C 6F 20 E4 B8 96 E7 95 8C 20 F0 9F 8C 8D
Code points: U+0048 U+0065 U+006C U+006C U+006F U+0020 U+4E16 U+754C U+0020 U+1F30D

ASCII の字母 H e l l o は退屈な部分です: 1 バイトずつ、コードポイントは U+0048 から U+006F。面白いのは残りです:

  • 世(U+4E16)は 3 つの UTF-8 バイト: E4 B8 96。界(U+754C)も同じく 3 バイト: E7 95 8C。1 文字でも、1 バイトではありません。
  • 🌍(U+1F30D)は4 つの UTF-8 バイト: F0 9F 8C 8D。コードポイントは U+FFFF を超えるため Unicode の astral 面にあり、4 バイトの UTF-8 シーケンスを必要とします——それでもなお 1 文字、コードポイントリストの 1 エントリです。

逆方向に実験します: モードをコードポイントに切り替え、U+1F600 U+1F604 を貼り付けると、テキスト(😄 系の絵文字)と UTF-8 の 16 進の両方が現れます。この往復こそ、どのバイトがどの文字に対応するかを確認する方法です。

よくある質問#

絵文字が 4 つの 16 進バイトを取るのにコードポイントは 1 つだけなのはなぜですか?#

UTF-8 が可変幅エンコードだからです。U+0080 未満のコードポイントは 1 バイトに収まり、U+0080〜U+07FF は 2 バイト、U+0800〜U+FFFF は 3 バイト、U+10000 以上(ほとんどの絵文字、歴史的スクリプト、音楽記号)は 4 バイトを取ります。コードポイントは Unicode によるその文字の名前であり、バイトは UTF-8 がたまたまそれをどう格納するかです。同じ文字、2 つの異なる数字です。

U+XXXX と \uXXXX の違いは何ですか?#

どちらも同じコードポイントを指しますが、別の世界から来ています。U+0041 は Unicode 自身の表記です。\u0041 は JavaScript、Java、C の文字列リテラルで使われるエスケープです。注意点: \uXXXX は 4 桁の 16 進しか保持できないため、U+1F30D のような astral コードポイントを直接は表現できません——\u を使う言語は、サロゲートペア(\ud83c\udf0d)か、\u{1F30D} のような拡張構文を必要とします。このツールのコードポイント入力はどちらの形式も受け付けます。

16 進バイトを貼り付けたら「無効な UTF-8」エラーになりました。どういう意味ですか?#

あなたが貼り付けたバイトが正当な UTF-8 シーケンスを形成していません——多くの場合、16 進文字列の長さが奇数(バイト半分が足りない)、先頭バイトが主張するマルチバイトシーケンスを後続バイトが完了していない、あるいはデータが実際には UTF-8 以外(GBK、Shift-JIS、生の Latin-1)でエンコードされていた、のいずれかです。デコーダは strict モードを使うため、置換文字を黙って生成するのではなく、問題が報告されます。

文字列の「本物の」文字数を数えるのに使えますか?#

はい——コードポイント数は、ユーザーが考える文字数であり、ほとんどの UI が制限すべきものです。Hello 世界 🌍 はコードポイントで 10 文字ですが、UTF-8 では 17 バイト、JavaScript では 11 UTF-16 コードユニット(string.length)になることに注意してください。ツイートやフォームフィールドの文字予算が必要なら、バイトでも string.length でもなく、コードポイントを数えてください。