Unicode NFKD正規化
file ① caféはアクセントが分かれたfile 1 caféになります。合字は個別の文字に、丸数字は普通の数字に、アクセント付きの文字は基本の文字と記号に分かれ、後から再合成はしません。ブラウザで無料で使えます。
- 無料
- ブラウザで動作
- 登録不要
- データは端末の外に出ません
無料で実行
計算例
- テキスト
- file ① café
- 結果
- file 1 café
- 形式
- NFKD
- 入力の長さ
- 10
- 結果の長さ
- 12
Unicodeテキストは、同じ抽象文字を合字・前置合成のアクセント付き文字・丸数字・基底+結合記号など複数の符号化形で表すことがあります。検索エンジン、データベース、セキュリティフィルタは、file と file が一致し、café と café が分解後に等しく比較でき、① が数字を隠さないよう、安定した単一形を必要とします。Unicode正規化形式KD(NFKD)は互換分解を適用し、合字を展開し、見た目だけの差を取り除き、結合列を再合成せずに分離します。本機能は任意の文字列を受け取り、標準のNFKDアルゴリズムを実行し、正規化結果に加えて長さとコードポイントの統計、変更の有無を示す真偽値を返します。
NFKDの動作とNFC・NFD・NFKCとの違い
Unicode正規化形式KDは、Unicode標準附属書15で定義される互換分解です。NFDが前置合成の é を e と結合アキュートに分けるような正規分解のみを行うのに対し、NFKDは多くの照合タスクで意味上必須ではない書式・表示上の差を取り除く互換マッピングも適用します。
単一文字の fi のような合字は f と i の二文字になり、ff は f f、ffi は f f i になります。丸数字、全角数字、上付き文字などの互換文字は平易な対応形へ展開されます。正規の結合列は分解順のまま現れるため、café は cafe に続けて e 上の結合アキュートになることがあります。
NFKDは意図的に再合成しません。再合成はNFKCの段階です。索引付け、あいまい比較、後続処理前の表示形除去で最大限の展開が必要な場合はNFKDを選び、保存と表示にコンパクトな合成形が欲しい場合はNFCを選んでください。
実装はホスト言語の組み込み String normalize を用い、UAX 15 に従い現代のJavaScriptエンジンで完全に決定的です。
実務でUnicode NFKD正規化が現れる場面
検索・カタログ系は商品タイトルとユーザー向けラベルを正規化し、デザインツール由来の合字豊富なタイポグラフィが重複キーを作らないようにします。final と final はNFKD後に一致します。ローカライズ技術者は、紛らわしいホモグリフを探したり、表示形が単なる見た目の糖衣に過ぎないことを確認したりする際、互換分解後のユーザー文字列を比較します。
セキュリティとIDのパイプラインは、同じ抽象名の別Unicode綴りが許可リストをすり抜けないよう、ハッシュや等価比較の前にNFKDやNFKCをしばしば適用します。フォントとグリフのワークフローは、ファミリがいまだ単一グリフとして出荷する互換文字を文書化し、回帰フィクスチャ用の決定的な展開ステップを必要とします。
プログラミング講座は、一つの可視文字が分解後に複数スカラーへ対応し得ることを示して符号化を教え、専用のNFKDランディングはBase64やコードポイント変換器に埋もれるよりその検索意図に応えます。サポートはチケットの奇妙な記号を貼り付け、工学的再現のための権威ある展開形を必要とします。
U-plusのコードポイント一覧、HTMLエンティティ、UTF-8の文字化け修復が必要なら、別の検索意図とランディングとして扱い、このUnicode NFKD正規化ページに詰め込まないでください。
活用例
検索・カタログのキー折りたたみ
商品タイトルとラベルをNFKDで正規化し、合字や丸数字が平文相当の横で重複インデックスキーを作らないようにします。
IDとセキュリティの比較
等価やハッシュの前にユーザー名とトークンを互換分解し、ASCII寄りの形を期待するフィルタを表示バリエーションがすり抜けないようにします。
よくある質問
Unicode NFKDとは何ですか?
NFKDはUnicode標準附属書#15の正規化形式KDで、完全な互換分解です。合字と互換文字を展開し、結合記号を分離しますが、再合成はしません。
NFKDとNFKCの違いは何ですか?
どちらも互換分解を適用します。NFKCはその後、可能な箇所で合成文字へ再合成します。本ツールはNFKDのみ(分解形、再合成なし)を返します。
file は file になりますか?
はい。 fi合字 U+FB01 は互換文字で、NFKDは f + i に写像するため、file は changed が true のまま file に正規化されます。
無効な入力ではどうなりますか?
欠落した text、非文字列オブジェクト、非有限数、過大な文字列は明確なメッセージで拒否されます。検証失敗は課金されません。
結果が元の文字列より長くなるのはなぜですか?
合字が複数の文字に、アクセントが別の記号に分かれるためです。file ① caféの例では、画面上はほぼ同じに見えても、入力の10個のコードポイントが出力では12個になります。
関連ツール
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/enc/unicode-nfkd \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"file ① café"}'const res = await fetch("https://api.kit.forhosting.com/enc/unicode-nfkd", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "file ① café"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/enc/unicode-nfkd",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "file ① café"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/enc/unicode-nfkd", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"file ① café"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"file ① café"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/enc/unicode-nfkd", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"text": "file ① café"
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "enc.unicode_nfkd",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |
技術的な注記
無効または欠落した入力は invalid_input で失敗し、不正なペイロードがテキストを捏造しません。無料のブラウザツールと有料APIは同じ純粋モジュールを共有するため、授業デモ、ローカライズパイプライン、本番Webhookは常に一致します。
NFKDの動作とNFC・NFD・NFKCとの違い
本エンドポイントは常に form を NFKD として返すため、クライアントがどのアルゴリズムが走ったかを推測する必要はありません。
入力契約、応答フィールド、エラー動作
空文字列は有効で、changed が false の空のNFKD結果を返します。六万五千五百三十六を超えるUTF-16コード単位の文字列は失敗し、暴走した貼り付けがワーカーを枯渇させないようにします。text 欠落は課金なしで即失敗します。貼り付けたラベルや商品名の確認には無料ブラウザフォームを、一括フィクスチャやCIアサーションには同一契約のスクリプト呼び出しを使ってください。検証失敗は前払い残高を消費しません。必須の文字列フィールド text を含むJSONオブジェクトを送ってください。text 自体が無い場合、兄弟の符号化ツールと同様に input、value、s、data の別名を受け付けます。数値と真偽値は十進または true / false の文字列形へ強制変換され、オブジェクト、配列、null、NaN、Infinity は問題を明示する invalid_input で拒否されます。成功時、本体は元の text をエコーし、result にNFKD正規化文字列を、form に定数 NFKD を、result が text と異なるとき changed を true に、input_length と result_length をUTF-16単位数として、input_code_points と result_code_points をUnicodeスカラー数として報告し(絵文字や非BMP文字の誤計数を防ぎ)、UAX 15 を指す短い標準ラベルを含めます。例:合字語 file は file になり changed は true、一単位が四単位になるため result_length は増えます。成功したAPI呼び出しの価格は公開ベースの $0.002 毎件です。
実務でUnicode NFKD正規化が現れる場面
本機能は純粋なparseエンジンのため、API価格は成功1件あたり公開ベースの $0.002 で、検証失敗は残高を消費しません。
連携の活用例
ローカライズと教育用フィクスチャ
ゴールデンテスト、グリフカバレッジ確認、UAX #15互換マッピングの授業デモ向けに、安定した分解済み文字列を生成します。
技術的な質問
料金はいくらですか?
ブラウザツールは無料でローカル実行です。APIリクエストは成功1件あたり $0.002 の前払いKIT残高を使用し、無効入力は課金されません。