てもとツール
ツール紹介

文字ごとのUnicode番号と名前をその場で調べる

貼り付けた文字列を1文字ずつ分解して、U+番号・Unicodeの名前・ブロックを表にする手順を紹介します。見た目に出ない文字の見つけ方と、正規化で内容が変わるかの確かめ方も説明します。

公開読了目安 約4分

この記事の要点

  • 貼り付けるだけで1文字ずつの番号と名前が表になる
  • 見た目の文字数とコードポイント数の差を内訳で説明する
  • ゼロ幅スペースなど見えない文字を位置と個数で示す
  • NFC・NFD・NFKC・NFKDの4形で内容が変わるかが分かる
  • 入力した内容はブラウザの中だけで処理される
目次

同じに見える文字なのに検索でヒットしない。そんなときは、文字コード調査ツールにその文字列を貼り付けてみてください。1 文字ずつの正体が表になって出ます。

文字コード調査ツールの初期画面。文字を貼り付けるモードと U+ 番号から組み立てるモードのボタンが並び、下に入力欄がある

見た目が同じでも中身は同じとは限らない

画面に出ている「が」が、いつも同じ 1 文字とは限りません。「か」と濁点の 2 文字でできている場合があります。

単語のあいだに幅のない文字がはさまっていることもあります。Web ページからコピーしたときによく起きます。

こうした違いは目では追えません。だから文字を 1 つずつ番号に開いて見る道具が要ります。

貼り付けるだけで 3 つの数が並ぶ

入力欄に文字列を貼り付けると、上に 3 つの数が出ます。見た目の文字数(書記素)、コードポイント、そして length と呼ばれる UTF-16 コード単位です。

絵文字の家族を貼り付けた画面。書記素 1・コードポイント 5・UTF-16 コード単位 8 と表示され、その下に差の内訳が並ぶ

家族の絵文字は、見た目は 1 文字でも中身は 5 つの文字の組み合わせです。だから 3 つの数が食い違います。

大事なのはその下の行です。差がいくつで、その差が何によるものかを件数で並べます。上の例では、サロゲートペアが 3 個と絵文字の連結が 4 個で、差がぴったり説明されています。

見た目に出ない文字を名指しする

貼り付けた文字列に幅のない文字がまざっていると、結果の中ほどに一覧が出ます。何の文字が何個あって、何文字目から現れるかまで並びます。

見た目に出ない文字の一覧。U+200B ZERO WIDTH SPACE が 1 個 4 文字目から、U+00A0 NO-BREAK SPACE が 1 個 8 文字目からと表示されている

上の例では、見た目にはただの ABC123 DEF に見える文字列から 2 つ見つかりました。幅ゼロの空白と、改行しない空白です。

このツールは「危ない文字です」といった判定をしません。意図して入れている場合もあるからです。何がどこにあるかという事実だけを並べ、判断は使う人にゆだねます。

正規化で内容が変わるかを見る

システムによっては、入力された文字列を保存する前に「正規化」という処理をかけます。このとき内容が変わると、入力したはずの値と保存された値が別物になります。

正規化の表。NFC は変わらない、NFD・NFKC・NFKD は変わるとなっており、変換後に株式会社Aがと出ている

表には 4 つの形が並びます。NFC と NFD は見た目を保ったまま並びをそろえるもので、NFKC と NFKD は互換文字を開くものです。

上の例では が「株式会社」に、全角の が半角の A に開きました。どの形で変わるかが分かると、システム側がどの処理をしているか推測しやすくなります。

1 文字ずつの表で正体を確かめる

いちばん下に、書記素ごとにまとめた表が出ます。番号・名前・ブロック・種類・バイト列が 1 行ずつ並びます。

1 文字ずつの表。葛と異体字セレクタ、か と結合濁点、A の行が並び、それぞれ U+ 番号と名前が入っている

名前は Unicode が定めた正式なもので、HIRAGANA LETTER A のように英語で書かれています。日本語訳は出典に存在しないため、このツールは訳を作らずそのまま出します。

左端の欄に「NFC で変わる」と出ていれば、その 1 文字が正規化の対象です。どの文字が原因かがひと目で分かります。

使用例

たとえば、会員登録フォームで氏名が弾かれる問い合わせを受けたサポート担当者を考えてみます。

送られてきた氏名をそのままツールに貼り付けると、姓と名のあいだに全角スペースではなく別の空白が入っていました。表にはその文字の番号と名前が並びます。

問い合わせへの返信で「◯文字目の空白を半角に置き換えてください」と具体的に案内できます。目で見て探すより確実です。

U+ 番号から文字を組み立てる

番号だけを渡されて、それがどの文字か分からないこともあります。そんなときは上のボタンで「U+ 番号から組み立てる」に切り替えてください。

U+ 番号のモード。U+3042 U+3099 0x1F600 あ と入力され、組み立てた文字列が下に表示されている

U+3042 のほか、0x3042ああ の書き方を受け付けます。空白・改行・カンマで区切って並べれば、複数の番号から文字列を組み立てます。

組み立てたあとは、貼り付けたときとまったく同じ解析にかかります。番号から入っても表と正規化の結果はそろいます。

文字数を数えたいときや化けを直したいときは

このツールが担うのは「1 文字ずつの解剖」です。原稿の文字数を数えるなら文字数カウンターを使ってください。

読めない文字列を元に戻したいときは文字化け修復ツール、全角と半角をそろえたいときは全角半角変換ツールが向きます。

本ツールは、それらを使う前に「いま何が起きているか」を確かめる役割です。

まとめ

見た目が同じなのに一致しない、という困りごとの原因はだいたい文字の中身にあります。番号まで開いて見れば、どこが違うのかがはっきりします。

貼り付けた内容はブラウザの中だけで処理し、外部には送りません。氏名や住所を含む文字列でも、そのまま調べられます。

補足: 開発者の方へ

見た目の 1 文字は Intl.Segmenter の書記素分割で数えています。String.prototype.length は UTF-16 のコード単位を返すため、BMP 外の文字では 2 になります。

参照している名前・ブロック・一般カテゴリは Unicode Character Database(UCD)の値です。データはツールのページを開いたときにだけ読み込む別チャンクにしてあり、ほかのページの表示には影響しません。

正規化は String.prototype.normalize の 4 形をそのまま呼んでいます。書記素ごとの「変わる」印は、書記素単位の正規化を連結した結果が文字列全体の正規化と一致するときだけ表示します。

あわせて読みたい

同じテーマ・関連ツールの記事です。