文字を10進数の文字コードに変換する方法と、UnicodeとUTF-8で値が違う理由

31 10月、2026 • ガイド • 4 回の閲覧 • 1 分 読んだ

畳の部屋の低い木の机にノートパソコンとノートが置かれ、格子状に並べた小さなカードが文字と数の対応を思わせる様子

「あ」を10進数で表すと、12354にも227 129 130にもなります。コードポイント、UTF-8のバイト値、HTMLの数値文字参照の違いを表で整理し、10進数変換器で文字と数値を相互に変換する手順と注意点を解説します。

「あ」を10進数の文字コードで表すと、Unicodeのコードポイントなら12354(U+3042)、UTF-8のバイト値なら227 129 130という3つの数になります。HTMLに書く数値文字参照ではコードポイントのほうを使うので、「あ」はあと書きます。

どれも「あ」を正しく表した数ですが、何を数値にしているかが異なります。目的に合わない数を使うと、HTMLで別の文字が表示されたり、変換ツールで元の文字に戻らなかったりします。

  • Unicodeのコードポイントは12354です。文字そのものに割り当てられた番号で、16進数ではU+3042と書きます。
  • UTF-8のバイト値は227 129 130です。ファイルや通信データの中で「あ」が実際に占める3バイトを、10進数で並べたものです。
  • HTMLの数値文字参照はあ、または16進数であと書きます。中に入る数はコードポイントです。

Unicodeのコードポイントは文字や記号に割り当てられた番号

Unicodeのコードポイントは、Unicodeが文字や記号に割り当てた番号で、どの文字コードで保存したかに関係なく決まっています。ただし、見た目の1文字が複数のコードポイントでできている場合もあります。通常は「U+」のあとに16進数を続けて表し、「あ」はU+3042、「日」はU+65E5です。16進数の3042を10進数に直すと12354、65E5は26085になります。

半角英数字の範囲では、コードポイントとUTF-8のバイト値が同じ数になります。たとえば「A」は、コードポイントもUTF-8のバイト値も65です。半角英数字だけで試しているうちは違いが見えず、日本語などASCII以外の文字を入れると両者の違いが分かります。

HTMLの数値文字参照はコードポイントを10進数か16進数で書く

HTMLの数値文字参照に入れる数は、UTF-8のバイト値ではなくUnicodeのコードポイントです。2026年10月29日時点で、W3Cの国際化解説ページ「Using character escapes in markup and CSS」は、数値文字参照を10進数の&#nnnn;か16進数の&#xhhhh;で書くこと、そしてその数は文書の文字コードでの値ではなく文字のUnicodeコードポイントであることを説明しています。

「あ」の場合、次の2通りの書き方があり、どちらでも同じ文字になります。

  • 10進数で書く場合はあ
  • 16進数で書く場合はあ(数の前に小文字のxを付けます)

同じページでは、末尾のセミコロンを省略しないよう注意を促しています。また、UTF-8のバイト値をあのように並べても「あ」にはなりません。これらはUTF-8のバイト列としてではなく、個別の数値文字参照として処理されるからです。

UTF-8のバイト数はコードポイントの範囲で1から4バイトに決まる

UTF-8では、コードポイントの範囲によって、1つのコードポイントを表すのに必要なバイト数が決まっています。日本語のかなや漢字の多くは3バイト、😀のような絵文字は4バイトです。2026年10月29日時点で、UTF-8の仕様であるRFC 3629は、範囲とバイト数を次のように定めています。

コードポイントの範囲UTF-8のバイト数当てはまる文字の例
U+0000からU+007Fまで1バイト半角英数字(Aなど)
U+0080からU+07FFまで2バイト©(U+00A9、10進のバイト値は194 169)
U+0800からU+FFFFまで3バイトひらがな、カタカナ、漢字(あ、日、漢)、半角カナ(ア)
U+10000からU+10FFFFまで4バイト😀(絵文字)

なお、U+D800からU+DFFFまではUTF-16で使うサロゲートの範囲で、RFC 3629はこれをUTF-8で符号化することを禁じています。RFC 3629には「日本語」の3文字(U+65E5、U+672C、U+8A9E)をUTF-8で表した例が載っており、16進数でE6 97 A5 E6 9C AC E8 AA 9Eの9バイトになります。1文字あたり3バイトずつ使っていることになります。

代表的な文字のコードポイントとUTF-8のバイト値

次の表は、よく使われる文字の値を2026年10月29日にPython 3で計算したものです。「日」の行は、RFC 3629の例の先頭3バイトと一致します。「UTF-8(10進)」の列は、後述の10進数変換器の出力と同じ形式です。

文字Unicode10進のコードポイントUTF-8(16進)UTF-8(10進)HTMLの数値文字参照
AU+0041654165A
あU+304212354E3 81 82227 129 130あ
日U+65E526085E6 97 A5230 151 165日
漢U+6F2228450E6 BC A2230 188 162漢
ア(半角)U+FF7165393EF BD B1239 189 177ア
😀U+1F600128512F0 9F 98 80240 159 152 128😀

10進のコードポイントとUTF-8(10進)の値が一致するのは「A」の行だけです。半角カナの「ア」は見た目こそ半角ですが、コードポイントがU+0800からU+FFFFまでの範囲にあるため、UTF-8では3バイトになります。絵文字の😀はU+10000以上なので4バイトとなり、10進数でも4つの数が並びます。これに対して、HTMLの数値文字参照は1つのコードポイントを参照1つで表します。複数のコードポイントでできた絵文字などは、参照も複数になります。

Digily Linkの10進数変換器で文字を10進数に変換する手順

Digily Linkの10進数変換器に文字を入力して「10進数に」を選ぶと、UTF-8のバイト値が10進数で表示されます。Unicodeのコードポイントが表示されるわけではないので、この点に注意してください。なお、Digily Linkは私たちが運営しているサービスで、このツールはどなたでも利用できます。

  1. 「10進数変換器」のページを開きます。
  2. 「コンテンツ」欄に、調べたい文字を入力するか貼り付けます。
  3. 種類で「10進数に」を選びます。
  4. 「送信」を押します。
  5. 「10進数」の欄に結果が表示されます。「あ」なら227 129 130です。

複数の文字を入力すると、すべてのバイト値が半角スペース区切りで続けて並びます。たとえば「日本」なら230 151 165 230 156 172です。どこまでが1文字かを示す区切りは入らないため、ひらがなや一般的な漢字なら3つずつ、😀のような絵文字なら4つずつをひとまとまりとして読みます。

このような出力になるのは、ツールの内部処理によるものです。ツールのコードでは、PHPのord()関数でテキストを1バイトずつ読み取り、それぞれの値の後ろに半角スペースを付けています。そのため、結果の末尾にもスペースが1つ残ります。2026年10月29日時点で、PHPマニュアルのord()は、この関数が文字コードを認識しないこと、特にUTF-8のようなマルチバイトの文字コードではUnicodeのコードポイントを判別しないことを説明しています。返すのは0から255までの1バイト分の値で、コードポイントが必要な場合はmb_ord()を使うよう案内しています。

入力欄についても1点注意があります。入力したテキストは、HTMLタグが削除され、前後の空白が取り除かれたうえで変換されます。「<b>」のようなタグを含む文字列を入力しても、タグの部分は変換結果に含まれません。

10進数をテキストに戻すときは12354ではなく227 129 130を入れる

「テキストへ」はUTF-8のバイト値を受け付ける機能です。そのため「あ」に戻したいときは、コードポイントの12354ではなく227 129 130を入力します。12354を入力すると、コードの仕組み上、「あ」ではなく「B」が出力されます。

原因は変換方法にあります。「テキストへ」は入力を半角スペース1つで区切り、数でない部分を読み飛ばしたうえで、残った数をPHPのchr()関数で1つずつ1バイトに変換しています。2026年10月29日時点で、PHPマニュアルのchr()は、0から255までの範囲外の値は255とのビット単位の論理積をとると説明しています。つまり、256で割った余りとして扱われます。

12354を256で割ると、商は48で余りは66です。66は「B」のバイト値なので、「あ」のつもりで入力した12354が「B」になってしまいます。このとき、意図した「あ」には戻りません。なお、同じPHPマニュアルによると、PHP 8.5以降ではchr()に0から255の範囲外の整数を渡すことが非推奨になっており、環境によっては警告が出ることがあります。ほかの日本語のコードポイントを入力した場合も、元の文字ではなく別の文字や読めない記号になることがあります。

「テキストへ」に入れる値結果(コードの仕組みからの見込み)
227 129 130「あ」に戻る
12354256で割った余りの66として扱われ、「B」になる
227,129,130カンマを含む部分は数として認識されず、読み飛ばされる

数は半角スペースで区切ってください。区切りとして扱われるのは半角スペースだけなので、カンマで区切った数は読み飛ばされます。全角スペースや改行、タブで区切った場合も、意図した複数の数として処理されないことがあります。大事なデータを変換する前に、まず227 129 130で「あ」に戻るかどうかを自分の環境で試しておくと安心です。

手元にあるのがコードポイントの12354で、そこから文字に戻したい場合は、このツールではなくコードポイントを扱う方法を使います。HTMLなら&#12354;と書けば「あ」と表示されます。プログラムなら、コードポイントを受け取る関数を使います。

コードポイントとUTF-8のバイト値の使い分け

文字を番号で指定するときはコードポイントを、ファイルや通信データをバイト単位で調べるときはUTF-8のバイト値を使います。場面ごとに整理すると次のとおりです。

場面使う数「あ」の例
HTMLの数値文字参照を書くコードポイント&#12354; または &#x3042;
プログラムで文字の番号を取り出す(PHPのmb_ordなど)コードポイント12354
UTF-8で保存されたCSVやファイルの中身をバイト単位で確かめる、文字化けの原因を探す(Shift_JISなど別の文字コードで保存されたファイルではバイト値が異なります)UTF-8のバイト値227 129 130
10進数変換器の「テキストへ」に入れるUTF-8のバイト値227 129 130

なお、HTMLではそもそも数値文字参照を使う必要がない場面がほとんどです。2026年10月29日時点で、先ほどのW3Cのページは、文書をUTF-8で保存して文字をそのまま書くことを基本とし、エスケープは&lt;や&amp;のように構文と紛らわしい文字や、目に見えない文字に限って使うよう勧めています。UTF-8で保存したHTMLなら、「あ」は&#12354;と書かずに、そのまま「あ」と書けばよいわけです。

手元の文字がUTF-8で何バイトになり、どんな値になるかを確かめたいときは、文字をUTF-8の10進数バイト値に変換する10進数変換器を使ってみてください。出力された数を「テキストへ」に入れて元の文字に戻るかを確認すれば、変換結果に入力ミスがないかも確かめられます。

よくある質問

10進数で書かれた文字コードを文字に戻すには?

まず、その数がコードポイントなのかUTF-8のバイト値なのかを見分けます。UTF-8の各バイト値は0から255までの範囲に収まるため、256以上の数が含まれていれば、それは1バイト分の値ではありません。ただし、コードポイントとは限らないので、元のデータの形式を確認してください。すべて255以下で、日本語の文章なのに3つずつまとまって並んでいる場合は、UTF-8のバイト値である可能性が高いでしょう。バイト値なら半角スペース区切りで「テキストへ」に入力し、コードポイントならHTMLの数値文字参照かコードポイント用の関数で文字に戻します。

絵文字の😀はなぜ4つの数になるのですか?

😀のコードポイントは128512(U+1F600)です。RFC 3629では、U+10000以上の文字はUTF-8で4バイトになると定められているため、バイト値で表すと240 159 152 128の4つになります。テキストに戻すときは、4つすべてを順番どおりに入力してください。一部だけでは元の絵文字になりません。

カンマ区切りで入力できますか?

「テキストへ」はカンマ区切りに対応していません。「227,129,130」のように入力すると数として認識されず読み飛ばされるので、カンマを半角スペースに置き換えてから入力してください。表計算ソフトなどからコピーした数は、タブや改行で区切られていることもあります。その場合も、半角スペース区切りに直してから入力するのが確実です。

0件中0件の評価