コードポイントは、Unicodeが文字ごとに付けた番号です
Unicodeは世界の文字に番号を1つずつ割り当てた表で、その番号をコードポイントと呼びます。ひらがなの「あ」はU+3042(10進数で12354)、英字の「A」はU+0041(65)、😀はU+1F600(128512)です。U+に続く値は16進数で、4桁に満たないときは前を0で埋めて書きます。番号はU+0000からU+10FFFFまで全部で1,114,112個あり、2026年に公開されたUnicode 18.0では172,808文字が定められています。
このツールは文字欄とコード欄を並べ、どちらを書き換えても反対側をすぐに書き直します。コードはU+表記のほか、JavaScript・JSONの \u3042、ES2015の \u{3042}、Pythonの \U0001F600、HTMLの あ と あ、CSSの \3042、10進数、0x表記までの9種類で書き出せます。どの表記で書かれた値を貼り付けても、自動で見分けて文字に戻します。下の文字カードでは、選んだ文字の正式名称、ブロック・一般カテゴリ・追加されたバージョンを確認でき、コード空間マップでは、その文字が1,114,112マスのどこにあるかを見られます。
コードポイントを確認する場面
ふだんは文字の番号を意識する必要はありません。ですが、文字化けしたとき、コードに文字を直接書けないとき、見た目と実際に保存されている値が違うときには、番号を見ないと原因がつかめません。
- ログやAPIレスポンスを読む: サーバーのログやJSONのレスポンスに
\u3053\u3093\u306B\u3061\u306Fのように書かれた文章は、そのままでは読めません。コード欄に貼り付けると「こんにちは」に戻せます。 - Webページに記号を入れる: キーボードで打ちにくい記号は、HTMLでは
→(→)、CSSのcontentでは"\2192"のように番号で書きます。使う場所ごとに文法が違うため、1つの文字を複数の表記に書き換える場面がよくあります。 - 文字数制限と保存サイズ: 👩💻は画面上では1文字ですが、コードポイントは3個、JavaScriptのlengthは5、UTF-8では11バイトです。入力欄の文字数制限やデータベース列のサイズがどの単位で数えるかによって、同じ文章が通ることも切り捨てられることもあります。
- 濁点が分離する: macOSのHFS Plusは、ファイル名を完全に分解した形で保存します。このため「が」は「か」(U+304B)と結合用濁点(U+3099)の2つで保存され、別の環境に渡すと濁点だけが離れて見えたり、同じ名前で検索できなかったりすることがあります。
- 全角スペースと全角英数: 全角スペース(U+3000)や全角の英数字(「A」はU+FF21、半角の「A」はU+0041)が混ざると、見た目が似ていても文字列の比較や検索が一致しません。
- 見えない文字を探す: Webからコピーした番号やURLにゼロ幅スペース(U+200B)が混ざると、見た目は同じでも比較や検索が失敗します。ファイル先頭のBOM(U+FEFF)が原因で、CSVの最初の列名の前に余計な文字が付き、別の名前として読まれることもあります。
- 豆腐(□)になる文字: 文字が四角(□)や疑問符で表示されるときは、まだ割り当てられていない番号なのか、最近のバージョンで追加されて端末のフォントにまだない文字なのかを切り分ける必要があります。文字カードの名前と「追加されたバージョン」が手がかりになります。
使い方
- 文字欄に文字を入力または貼り付けると、コード欄にコードポイントが表示されます。反対にコード欄に
U+3042、\u3042、あなどを入れると、文字欄に文字が表示されます。複数の値はスペースかカンマで区切ります。 - 表記ボタンで、U+、10進数、0x、\u、\u{…}、Python、HTML 16進、HTML 10進、CSSのいずれかを選びます。コード欄に別の表記が入っていても、ボタンを押すと選んだ表記で書き直されるため、表記どうしの変換にも使えます。
- 「ASCIIはそのまま」をオンにすると、エスケープ表記で英数字と記号をそのまま残し、それ以外の文字だけを番号にします。オフにするとすべての文字を番号で書きます。AB・abボタンは16進数の大文字・小文字を切り替えます。
- コードポイントの帯でマスを押すと、文字カードに名前・ブロック・カテゴリ・追加されたバージョンと、10種類の表記が表示されます。行末のコピーボタンは、その表記1つだけをコピーします。
- コード空間マップで面の番号やマスを押すか、カードの ‹ › ボタンを押すと、周囲の文字をたどれます。使いたい文字は「文字欄に入れる」で文字欄に追加できます。
同じ文字を書き表す9種類の表記
コードポイントは1つでも、書き方の文法は使う場所ごとに違います。下の表は、「あ」(U+3042)と😀(U+1F600)を各表記で書いた値です。U+FFFFを超える😀は、表記によって1かたまりで書かれたり、2つに分かれたりします。
| 表記 | あ | 😀 | 使う場所 |
|---|---|---|---|
| U+ 表記 | U+3042 | U+1F600 | Unicodeの資料や文字表、解説記事 |
| 10進数 | 12354 | 128512 | プログラムの数値(JavaScriptのcodePointAt、Pythonのord) |
| 0x 16進数 | 0x3042 | 0x1F600 | C・Javaなどの数値定数と配列 |
| \u エスケープ | \u3042 | \uD83D\uDE00 | JavaScript・JSON・Javaの文字列(UTF-16単位) |
| \u{…} エスケープ | \u{3042} | \u{1F600} | ES2015以降のJavaScript、Rust・Swiftの文字列 |
| Python | \u3042 | \U0001F600 | Pythonの文字列(\Uは8桁) |
| HTML 16進 | あ | 😀 | HTML・XML文書 |
| HTML 10進 | あ | 😀 | HTML・XML文書 |
| CSS | \3042 | \1F600 | CSSのcontent値とセレクタ |
| UTF-8バイト | E3 81 82 | F0 9F 98 80 | ファイルやネットワークでやり取りされる実際のバイト |
| UTF-16単位 | 3042 | D83D DE00 | JavaScript・Java・Windowsが文字列を保持する単位 |
JSONとJavaの \u はちょうど4桁しか受け付けないため、U+FFFFを超える文字は次の節のサロゲートペアで書きます。Pythonは4桁の \u と8桁の \U を使い分け、CSSはバックスラッシュの後に16進数を1〜6桁書き、直後に16進数の数字やスペースが続く場合は、終わりを示すスペースを1つ置きます。HTMLの文字参照は、末尾をセミコロンで閉じます。このツールは貼り付けられた文章を読むときにこれらの規則をすべて認識するので、エスケープと文字参照は1つの文章に混ざっていても構いません。U+・0xの値は空白やカンマで区切った一覧のときだけ読み、エスケープの間に混ざっていれば文字のまま残して知らせます。HTMLの€〜Ÿは、HTML標準に従ってWindows-1252の表の文字(– → –)として読みます。
😀が \uD83D\uDE00 の2つで書かれる理由
UTF-16は文字列を16ビットの単位で保存します。16ビットで書けるのはU+FFFFまでなので、それより大きいコードポイントは、サロゲートという専用領域(U+D800〜U+DFFF)の値を2つ並べて書きます。😀(U+1F600)を例にすると、計算は次のとおりです。
- コードポイントから0x10000を引きます。0x1F600 − 0x10000 = 0xF600です。
- 残った20ビットを、上位10ビットと下位10ビットに分けます。0xF600の上位10ビットは0x3D、下位10ビットは0x200です。
- 上位の値に0xD800を、下位の値に0xDC00を足します。0xD800 + 0x3D = 0xD83D、0xDC00 + 0x200 = 0xDE00になります。
| 文字 | コードポイント | UTF-16(サロゲートペア) | UTF-8バイト |
|---|---|---|---|
| 😀 | U+1F600 | D83D DE00 | F0 9F 98 80 |
| 👍 | U+1F44D | D83D DC4D | F0 9F 91 8D |
| 𝄞 | U+1D11E | D834 DD1E | F0 9D 84 9E |
| 𠀀 | U+20000 | D840 DC00 | F0 A0 80 80 |
このためJavaScriptでは '😀'.length が2になり、JSONでは \uD83D\uDE00 と書かれます。上位サロゲート(D800〜DBFF)の直後には必ず下位サロゲート(DC00〜DFFF)が必要で、片方だけが単独で現れた場合は文字になりません。このツールは、U+D800のようなサロゲートの値や、対のない \uD83D をエラーとして知らせます。
文字数の4つの数え方
「文字数」は、何を数えるかで変わります。画面で1文字に見える単位はUAX #29が定める書記素クラスター(grapheme cluster)、コードポイント数はUnicode番号の個数、UTF-16の長さはJavaScriptのlengthの値、UTF-8バイトはファイルに保存したときのサイズです。文字欄の上の4つの欄が、これらの値です。
| 文字 | 見た目の文字数 | コードポイント | UTF-16 | UTF-8バイト | 違いの理由 |
|---|---|---|---|---|---|
| A | 1 | 1 | 1 | 1 | ASCIIでは4つの値がすべて同じです |
| あ | 1 | 1 | 1 | 3 | ひらがなはUTF-8で3バイトです |
| が(分解形) | 1 | 2 | 2 | 6 | 濁点が分かれた形では、結合用濁点も1コードポイントになります |
| 😀 | 1 | 1 | 2 | 4 | U+FFFFを超えるので、UTF-16では2単位です |
| 👍🏽 | 1 | 2 | 4 | 8 | 肌の色を表す修飾文字(U+1F3FD)が付きます |
| 🇯🇵 | 1 | 2 | 4 | 8 | 国旗は地域表示記号のJ・Pの2つです |
| 👩💻 | 1 | 3 | 5 | 11 | ZWJ(U+200D)が2つの絵文字をつなぎます |
| é(e + U+0301) | 1 | 2 | 2 | 3 | 結合アクセントが前の文字に付きます |
そのため、「何文字まで」という制限を設けるときは、まず何で数えるかを決める必要があります。人が感じる文字数は見た目の文字数、保存容量はUTF-8のバイト数、JavaScriptコードのsliceやsubstringの位置はUTF-16単位が基準です。絵文字の途中をUTF-16単位で切ると、対のないサロゲートが残り、文字化け(�)が生じます。
ハングル音節のコードポイント計算
このツールにハングルの音節を入れると、文字カードに初声・中声・終声の番号が表示されます。完成形のハングル11,172字(U+AC00〜U+D7A3)は、初声19個 × 中声21個 × 終声28個(パッチムなしを含む)を順に並べたものなので、番号を計算で求められます。Unicode仕様3.12節の式は次のとおりです。番号は0から数え、逆にコードポイントから0xAC00を引いた値を588(21 × 28)で割った商が初声、余りを28で割った商が中声、その余りが終声の番号です。
コードポイント = 0xAC00 + (初声の番号 × 21 + 中声の番号) × 28 + 終声の番号
| 文字 | 初声 | 中声 | 終声 | 計算 | コードポイント |
|---|---|---|---|---|---|
| 가 | ㄱ 0 | ㅏ 0 | なし 0 | AC00 + (0 × 21 + 0) × 28 + 0 | U+AC00 |
| 한 | ㅎ 18 | ㅏ 0 | ㄴ 4 | AC00 + (18 × 21 + 0) × 28 + 4 = AC00 + 10,588 | U+D55C |
| 힣 | ㅎ 18 | ㅣ 20 | ㅎ 27 | AC00 + (18 × 21 + 20) × 28 + 27 = AC00 + 11,171 | U+D7A3 |
コード空間マップ: 17の面
1,114,112個のコードポイントは、65,536個(0x10000)ずつ17の面に分かれています。U+1F600の先頭の1のように、4桁を超える上位の桁が面の番号です。ツールのマップで大きな板は面1つを256マスに分けたもので、1マスにコードポイント256個が入っています。マスの色は、そのマスを最も多く占めるブロックのグループです。
| 面 | 範囲 | 名前 | 入っているもの |
|---|---|---|---|
| 0 | U+0000〜U+FFFF | 基本多言語面(BMP) | ラテン文字・ハングル・基本的な漢字・かななど、現在使われる文字の大半、サロゲート(D800〜DFFF)、私用領域(E000〜F8FF) |
| 1 | U+10000〜U+1FFFF | 追加多言語面(SMP) | 絵文字の大部分、古代文字、数学用英数字記号、楽譜記号 |
| 2 | U+20000〜U+2FFFF | 追加漢字面(SIP) | CJK統合漢字拡張B〜F・I、CJK互換漢字補助 |
| 3 | U+30000〜U+3FFFF | 第3漢字面(TIP) | CJK統合漢字拡張G・H・J、小篆(Seal、Unicode 18.0) |
| 4〜13 | U+40000〜U+DFFFF | 割り当てなし | まだ文字が割り当てられていません |
| 14 | U+E0000〜U+EFFFF | 追加特殊用途面(SSP) | タグ文字、異体字セレクタ補助 |
| 15〜16 | U+F0000〜U+10FFFF | 追加私用面A・B | 組織やフォントがそれぞれ独自に決めて使う領域 |
面0で最も広い2つのかたまりは、CJK統合漢字(U+4E00〜U+9FFF、20,992コードポイント)とハングル音節(U+AC00〜U+D7A3、11,172字)です。その直後のU+D800〜U+DFFFはサロゲート専用で文字がなく、U+E000〜U+F8FFは私用領域で、名前を付けずに空けてある領域です。面1〜16は、すべてUTF-16ではサロゲートペアで書かれます。
目に見えない文字
スペースのように見える文字や、まったく見えない文字にもコードポイントがあります。コードポイントの帯と文字カードは、こうした文字を点線の枠に入った名札で表示するので、貼り付けた文章に何が隠れているかがすぐに分かります。
| 名札 | コードポイント | 正式名称 | よく現れる場所 |
|---|---|---|---|
| NBSP | U+00A0 | NO-BREAK SPACE(改行しないスペース) | Webの 、ワープロで入る改行されないスペース |
| ZWSP | U+200B | ZERO WIDTH SPACE(幅のないスペース) | Webからコピーした文章、改行位置を示す箇所 |
| ZWJ | U+200D | ZERO WIDTH JOINER(幅のない結合子) | 👩💻のように、2つの絵文字を1つにつなぐ箇所 |
| VS16 | U+FE0F | VARIATION SELECTOR-16(異体字セレクタ16) | ❤️のように、文字をカラー絵文字の形で表示させるとき |
| BOM | U+FEFF | ZERO WIDTH NO-BREAK SPACE(バイト順マーク) | 一部のエディタが保存したファイルの先頭 |
| IDSP | U+3000 | IDEOGRAPHIC SPACE(全角スペース) | 日本語・中国語の文書、全角入力状態でのスペース |
| HF | U+3164 | HANGUL FILLER(ハングル・フィラー) | 空白に見えるため、ニックネームなどに使われることもある文字 |
| SHY | U+00AD | SOFT HYPHEN(ソフトハイフン) | 行末で単語が分割されるときだけ見えるハイフン |
改行も文字です。Windowsのメモ帳は行末をCR(U+000D)とLF(U+000A)の2文字で、macOSとLinuxはLF1文字で書くことが多くあります。ただしブラウザの入力欄は、貼り付けたCR LFをLF1つに変換するため、ファイルの行末をそのまま確認するには、UTF-8 16進数変換ツールのようにバイトを見るツールが必要です。
正規化: NFCとNFD
Unicodeには、同じ文字を2通りに書き表せる場合があります。たとえば「が」は、1つのコードポイント(U+304C)でも、「か」(U+304B)と結合用濁点(U+3099)の2つでも書け、画面では同じに見えます。Unicodeもこの2つを同じ文字とみなします(正準等価)。合成した形にそろえる方式がNFC、分解した形にそろえる方式がNFDです(UAX #15)。
| 文字 | NFC(合成形) | NFD(分解形) |
|---|---|---|
| が | U+304C | U+304B U+3099 |
| パ | U+30D1 | U+30CF U+309A |
| é | U+00E9 | U+0065 U+0301 |
| Å | U+00C5 | U+0041 U+030A |
文字列の比較・検索・ファイル名は、正規化の形が違うと別の値として扱われることが多くあります。文字欄に分解された文字が混ざっていると、このツールが知らせ、「NFCにまとめる」「NFDに分解」ボタンでまとめて変換できます。半角と全角、①と1のように、形の違う文字を同じ文字にそろえる互換正規化(NFKC・NFKD)は、このツールでは行いません。
間違えやすい点
- U+の後ろの値を10進数で書く: U+3042の3042は16進数です。10進数の12354をU+12354と書くと、面1のまったく別の番号になります。このツールは、接頭辞のない数を16進数として読み、数字だけの場合は10進数として読み直すボタンを表示します。
- サロゲートの値をコードポイントとして書き写す:
\uD83D\uDE00をU+D83D U+DE00と書き写すと、文字になりません。コードポイントはU+1F600の1つです。 - \uの後ろの桁数: JavaScript・JSONの
\uはちょうど4桁、Pythonの\Uはちょうど8桁です。\u1F600は、U+1F60(ὠ)の後ろに数字の0が付いた文字列として読まれます。 - CSSエスケープの後ろの数字: CSSでは
"\30421"がU+30421として読まれます。「あ」の後ろに1を書くには、"\3042 1"のようにスペース1つでエスケープの終わりを示します。 - HTML参照のセミコロンを省く:
あのようにセミコロンを省くと、後ろに続く文字によって読み方が変わったり、エラーとして処理されたりします。あのように閉じて書くのが安全です。 - 長音記号と漢数字の「一」の取り違え: カタカナの長音記号「ー」(U+30FC)と漢数字の「一」(U+4E00)は、形が似ていても別の文字です。ファイル名や検索語に混ざると一致しないので、コードポイントで確認します。
- 見た目だけで同じ文字と判断する: ラテン文字のA(U+0041)、ギリシャ文字のΑ(U+0391)、キリル文字のА(U+0410)は、形が同じでも別の文字です。URLやIDに混ざると検索やログインが失敗するので、コードポイントで確認します。
制限事項
- 文字名・ブロック・一般カテゴリ・追加されたバージョンは、Unicode 18.0のデータに基づきます。字形はお使いの端末のフォントが描くため、データにある文字でも四角で表示されることがあります。
- 見た目の文字数は、ブラウザの書記素クラスターの規則(Intl.Segmenter)で数えます。ブラウザが対応するUnicodeのバージョンによって、最新の絵文字の組み合わせは数え方が変わることがあります。
- Pythonの
\N{名前}表記と8進数のエスケープは読み取りません。\xはバイトではなくコードポイント(U+0000〜U+00FF)として読むので、UTF-8のバイトを文字に戻すときはUTF-8 16進数変換ツールを使います。 - CSSは
\0とサロゲート、U+10FFFFを超える値をU+FFFDに置き換えて読みますが、このツールはサロゲートと範囲を超える値をエラーとして知らせます。 - 互換正規化(NFKC・NFKD)、大文字・小文字の変換、文字名による検索は行いません。
- 文字欄は200,000文字まで変換し、コードポイントの帯は先頭の400個まで描画します。
- 変換はこのブラウザの中だけで行います。文字名のデータファイルを一度取得するだけで、入力した文字やコードをサーバーに送ることはありません。
基準: U+表記と面・サロゲート・ハングル音節の規則はUnicode 18.0コア仕様、文字名・ブロック・追加されたバージョンはUnicode 18.0文字データベース(UCD)、エスケープの文法はECMAScript・Python・HTML・CSSの仕様とRFC 8259を、2026年10月22日に確認しました。表の値は、このツールの変換コアで再計算して照合しています。
出典
- 01Unicode 18.0 付録A: Notational ConventionsコードポイントはU+に続けて16進数4〜6桁、短いときは前を0で埋める
- 02Unicode 18.0 2.8.1: Planesコード空間0〜10FFFF(1,114,112個)、BMP・SMP・SIP・TIP・SSPと私用面
- 03Unicode 18.0 3.9.2: UTF-16U+FFFFを超える文字はサロゲートペアの2単位
- 04Unicode 18.0 3.12: Hangul Syllable DecompositionSBase AC00、初声19・中声21・終声28、11,172字
- 05Unicode 18.0 4.8.1: Unicode Name Propertyハングル音節・CJK漢字の名前を作る規則(表4-8)
- 06Unicode 18.0.013,007文字が加わり、合計172,808文字
- 07Unicode Character Database 18.0文字名(UnicodeData)、ブロック(Blocks)、追加バージョン(DerivedAge)
- 08UAX #29: Unicode Text Segmentation画面上で1文字に見える書記素クラスター(grapheme cluster)
- 09UAX #15: Unicode Normalization FormsNFC・NFDと正準等価
- 10ECMA-262: String LiteralsJavaScriptの\uXXXXと\u{…}エスケープ
- 11Python言語リファレンス: エスケープシーケンス\uxxxx(4桁)、\Uxxxxxxxx(8桁)、\N{name}
- 12HTML Standard: Character references10進・16進の数値文字参照と名前付き文字参照
- 13CSS Syntax Level 3: Consume an escaped code pointバックスラッシュの後の16進数1〜6桁、続く空白1つは終わりの印
- 14RFC 8259 7章: StringsJSONはU+FFFFを超える文字を\uD834\uDD1Eのようにペアで書く
- 15MDN: String.lengthJavaScriptの文字列の長さはUTF-16コード単位の数
- 16Apple TN1150: HFS Plus Volume FormatHFS Plusはファイル名を完全に分解した形で保存する
よくある質問
ひらがなの「あ」のUnicodeは何ですか?
「あ」のコードポイントはU+3042で、10進数では12354です。JavaScript・JSONでは\u3042、HTMLではあまたはあと書き、UTF-8で保存するとE3 81 82の3バイトになります。
U+3042のようなコードを文字に変換するには?
コード欄にU+3042を入れると、文字欄に「あ」が表示されます。\u3042、あ、あ、0x3042のように別の表記で書かれた値も、そのまま貼り付ければ表記を見分けて文字に戻します。複数の値はスペースかカンマで区切ります。
😀はなぜ\uD83D\uDE00のように2つで表示されるのですか?
😀のコードポイントはU+1F600の1つです。JavaScript・JSON・Javaの\uはUTF-16単位の4桁しか受け付けないため、U+FFFFを超える文字はサロゲートペア\uD83D\uDE00に分けて書きます。\u{1F600}やPythonの\U0001F600は1つで書けます。
絵文字1つの長さが2や5になるのはなぜですか?
JavaScriptのlengthはUTF-16単位の数を数えます。😀はコードポイント1個でもUTF-16では2単位で、👩💻はU+1F469・U+200D・U+1F4BBの3コードポイントなので5単位です。このツールは、見た目の文字数・コードポイント・UTF-16の長さ・UTF-8のバイト数をまとめて表示します。
同じに見える「が」なのに、コードポイントの数が違うのはなぜですか?
合成形(NFC)の「が」はU+304Cの1つですが、分解形(NFD)は「か」(U+304B)と結合用濁点(U+3099)の2つです。画面では同じに見えても、比較や検索では別の文字列として扱われることがあるため、「NFCにまとめる」ボタンでそろえられます。
目に見えない文字はどうやって探しますか?
文字欄に貼り付けると、コードポイントの帯にゼロ幅スペース(ZWSP、U+200B)、BOM(U+FEFF)、改行しないスペース(NBSP、U+00A0)などが点線の枠の名札で表示されます。コピーした番号やURLの動作がおかしいときに、原因を探す手がかりになります。
Unicodeのコードポイントはいくつありますか?
U+0000からU+10FFFFまで1,114,112個あり、65,536個ずつ17の面に分かれています。Unicode 18.0では172,808文字が定められていて、U+D800〜U+DFFFのサロゲート領域は文字として使われません。
入力した文字はサーバーに送信されますか?
いいえ。変換はこのブラウザの中だけで行います。文字名を表示するためにUnicode 18.0のデータファイルを一度取得しますが、入力した文字やコードをサーバーに送ったり保存したりすることはありません。