ブログ
日本語

Unicode変換 — コードポイント・UTF-8バイト

テキストとUnicodeコードポイント・エスケープ・UTF-8バイトを相互変換するツール

ブラウザー内で処理・アップロード不要

見た目の文字 8 · コードポイント 8 · UTF-16の長さ 9

変換結果

コードポイント(U+XXXX)

U+0043 U+0061 U+0066 U+00E9 U+0020 U+1F600 U+0020 U+3042

JavaScript / JSON(\uXXXX)

Caf\u00E9 \uD83D\uDE00 \u3042

ES6(\u{...})

Caf\u{E9} \u{1F600} \u{3042}

HTML 16進数(&#x...;)

Café 😀 あ

HTML 10進数(&#...;)

Café 😀 あ

UTF-8 バイト(16進数)

43 61 66 C3 A9 20 F0 9F 98 80 20 E3 81 82

UTF-16BE バイト(16進数)

00 43 00 61 00 66 00 E9 00 20 D8 3D DE 00 00 20 30 42

エンコードごとのバイト数

UTF-8
14バイト
UTF-16
18バイト
EUC-KR(CP949)
7バイト
EUC-KRで表せない文字が2個あります(数えていません)

EUC-KR(CP949)は韓国語の旧来のエンコードで、KS X 1001のハングル2,350音節も、CP949(UHC)拡張にあるそれ以外の現代ハングル8,822音節も2バイトです。UTF-8ではハングル1音節が3バイト、絵文字が4バイトです。

文字の一覧

文字コードポイントUTF-8UTF-1610進数見た目の文字
CU+0043430043671
aU+0061610061972
fU+00666600661023
éU+00E9C3 A900E92334
(見えない文字)U+0020200020325
😀U+1F600F0 9F 98 80D83D DE001285126
(見えない文字)U+0020200020327
あU+3042E3 81 823042123548

Unicode変換ツールとは

テキストを入力すると、よく使う表記がすべて一度に表示され、それぞれコピーできます。Unicodeのコードポイント、JavaScript・JSONのエスケープ、ES6形式、HTMLの16進数・10進数の文字参照、UTF-8とUTF-16BEの生のバイト列です。ソースコードに非ASCIIの文字を安全に埋め込みたいとき、ログの \uXXXX を読みたいとき、文字化けの原因を調べたいときに使えます。

UTF-8、UTF-16、韓国語の旧来のエンコードEUC-KR(CP949)でのバイト数も比べ、コードポイントごとの一覧表も表示します。逆方向では、エスケープや16進数のバイト列をテキストに戻せます。処理はすべてブラウザー内で行い、何も保存しません。

使い方

  1. 方向を「テキスト → コード」か「コード → テキスト」から選びます。
  2. 「テキスト → コード」では入力欄に入力します。最初から例「Café 😀 あ」が入っているので、すぐに結果が表示されます。
  3. 「ASCIIはそのまま」のチェックを外すと、非ASCII文字だけでなくすべての文字をエスケープします。
  4. 必要な形式をコピーします。バイト数の比較と文字の一覧はその下にあります。
  5. 「コード → テキスト」では、エスケープやU+の値(混在も可)なら自動判定のまま、バイト列ならその形式を選びます。
  6. 復号したテキストをボタンでコピーします。

仕組み

  • コードポイント:U+のあとに大文字の16進数を最低4桁(U+0041)で書き、スペースで区切ります。
  • JavaScript / JSON:UTF-16のコード単位ごとに \uXXXX を1つ書くので、U+10000以上の文字はサロゲートペアになります。ES6形式はコードポイントごとに \u{...} を1つ書きます。
  • HTML:コードポイントごとに &#x…; または &#…; を1つ書きます。
  • ASCIIはそのまま:印字可能なASCII(U+0020〜U+007E)は変えずに残します。ただし、結果を曖昧さなく戻せるよう、バックスラッシュ(JavaScript)と & < > “ ’(HTML)はエスケープします。改行とタブは常にエスケープします。
  • UTF-8のバイトはブラウザーのTextEncoderで作ります。UTF-16はコード単位ごとに2バイトで、上位バイトを先に書きます(ビッグエンディアン)。
  • EUC-KR(CP949):すべての2バイトの組(先頭0x81〜0xFE、後続0x41〜0xFE)をブラウザーのEUC-KRデコーダーで読んで逆引き表を作ります。ASCIIは1バイトです。가〜힣の11,172音節はすべて2バイトで、KS X 1001の2,350音節とCP949(UHC)拡張の8,822音節からなります。デコーダーがKS X 1001しか知らない場合は、CP949の配置で補います。
  • 見た目の文字は、ブラウザーのIntl.Segmenterによる書記素クラスター(Unicode標準附属書29)です。一覧表はコードポイントごとに1行で、複数のコードポイントでできた文字に印を付け、最初の200個を表示します。
  • 復号:U+の値は4〜8桁の16進数で、U+の値の間のスペースやカンマは区切りとして扱います。U+10FFFFを超える値や対になっていないサロゲートは、位置とともに知らせます。バイト列ではスペース、カンマ、コロン、ハイフン、0x・\x・%の接頭辞を無視し、不正なUTF-8はバイトの位置とともに知らせます。
  • 入力は20,000字までです。

例

文字 コードポイント JavaScript UTF-8のバイト UTF-8 / UTF-16 / EUC-KR
A U+0041 A(「ASCIIはそのまま」オフなら A) 41 1 / 2 / 1バイト
é U+00E9 é C3 A9 2 / 2 / 表せない
あ U+3042 あ E3 81 82 3 / 2 / 2バイト
中 U+4E2D 中 E4 B8 AD 3 / 2 / 2バイト
😀 U+1F600 😀 F0 9F 98 80 4 / 4 / 表せない

初期の例「Café 😀 あ」は、見た目の文字8、コードポイント8、UTF-16の長さ9です。UTF-8で14バイト、UTF-16で18バイト、EUC-KRでは7バイトで、éと絵文字は表せません。

逆方向では、自動判定で Café &#x1F600; U+3042 が「Café 😀 あ」に、UTF-8のバイト列 43 61 66 C3 A9 が「Café」になります。

よくある質問

コードポイントとエンコードの違いは何ですか?

コードポイントはUnicodeが文字に割り当てた番号で、たとえば「あ」はU+3042です。エンコードはその番号をバイトで保存する方法です。同じ「あ」がUTF-8ではE3 81 82、UTF-16では30 42になります。韓国語の「한」(U+D55C)はUTF-8でED 95 9C、旧来の韓国語エンコードEUC-KRではC7 D1です。

絵文字が \uXXXX 2つになるのはなぜですか?

JavaScriptとJSONの文字列はUTF-16のコード単位の並びです。U+FFFFを超える文字は2単位(サロゲートペア)が必要なので、😀(U+1F600)は 😀 と書きます。ES6形式の \u{1F600} はコードポイントを直接指定するので、エスケープ1つで済みます。

絵文字1つが複数のコードポイントになるのはなぜですか?

多くの絵文字は並びでできています。家族の絵文字は人の絵文字3つをゼロ幅接合子(U+200D)2つでつないだもので、見た目は1文字でも、コードポイント5個、UTF-16で8単位、UTF-8で18バイトです。肌の色や国旗の絵文字、濁点が分かれた「か+゛」のような文字も同じなので、要約には3種類の数を表示しています。

「EUC-KRで表せない」とはどういう意味ですか?

EUC-KR(CP949)は韓国語の旧来のエンコードで、ハングル、漢字、ひらがな・カタカナ、一部の記号は含みますが、絵文字やéのような文字は含みません。それらはEUC-KRのバイト数に含めず、別に数えます。ブラウザーにEUC-KRのデコーダーがない場合、この数値は表示しません。

入力した内容は送信されますか?

いいえ。変換はすべてブラウザー内で行い、入力内容は保存も送信もされません。

ほしいツールはありますか?