Unicode NFKC正規化
file ㎞ ①はfile km 1になります。合字、全角文字、丸数字などの装飾的な違いを普通の文字にそろえ、その後アクセントを再合成するので、同じ名前の表記ゆれが検索や重複確認で一致します。ブラウザで無料で使えます。
- 無料
- ブラウザで動作
- 登録不要
- データは端末の外に出ません
無料で実行
計算例
- テキスト
- file ㎞ ①
- 結果
- file km 1
- 形式
- NFKC
- 入力の長さ
- 7
- 出力の長さ
- 9
このUnicode NFKC正規化ツールは、任意のUnicode文字列を受け取り、Normalization Form KCの結果を返します。Unicode標準附属書15に定める互換分解のあと、正準合成を行います。見た目は似ていてもストレージ上は異なる提示形を、検索・索引・同一性判定で一致させます。fi合字はfとiに、全角ラテン文字はASCIIのA–Zに、丸付き数字は通常の数字に、黒字体や数式風の装飾文字は基底文字寄りに畳まれ、eと結合アキュートのような列は、対応する合成済み文字があれば1文字に合成されます。開発者は重複排除キー、URLスラッグ生成、カタログ検索でNFKCを使い、見た目が同等な互換異体が別レコードとして残らないようにします。無料のブラウザ経路で畳み込み結果を確認してから、同一アルゴリズムを自動化に組み込んでください。
NFKCの働きとNFCとの違い
Unicodeは4つの正規化形を定義します。NFCとNFDは正準等価だけを扱い、標準が同じ抽象文字とみなすものを再合成または分解します。例として合成済みのéと、e+結合アキュートがあります。
NFKCとNFKDは先に互換写像を適用します。互換写像は、組版では意味があっても照合では不要な提示差を意図的に捨てます。1コードポイントのfi合字はfとiに、全角数字・ラテン文字は半角ASCIIへ、上付き・下付き数字は通常数字へ、分数文字は分数スラッシュ付きの数字列へ、囲み文字や装飾字形の多くはより単純な基底へ縮みます。
互換分解のあと、NFKCはNFCと同じ合成ステップを行い、最終文字列は互換で畳まれかつ正準合成された形になります。表示忠実のため合字や全角スタイルを別グリフとして残したいときはNFCを選びます。等価判定・検索・ハッシュで異体を同じテキストとして扱いたいときはNFKCを選びます。
本機能は常にNFKCを適用し、応答にformを付けるのでクライアントがアルゴリズムを推測する必要はありません。
実パイプラインでNFKC正規化が効く場面
検索・カタログ系は索引前に商品名や利用者入力の氏名をNFKCで正規化し、全角ブランドとASCII双子が同じトークンに載るようにします。URLスラッグを作るコンテンツパイプラインは先にNFKCをかけ、合字や互換記号が後から不透明なパーセント符号化の驚きを生まないようにします。
データ品質ジョブはNFKC後にレコードを比較し、PDFやオフィス文書からコピーした装飾Unicode異体だけの疑似重複を見つけます。セキュリティや同一性の検査では、等価の前にユーザー名やラベルをNFKCで正規化し、真のホモグラフ攻撃ではないが完全一致ゲートを壊す互換形を減らします。
ローカライズ担当は本ページの無料ブラウザツールでサンプル句の畳み込みを確認し、同じ形を受入テストに固定します。
活用例
検索・カタログの重複排除
索引前にタイトルと名前をNFKC正規化し、合字・全角文字・互換数字が同じ検索キーに載るようにします。
スラッグとURLのパイプライン
スラッグ生成前に互換文字を畳み、コピー&ペースト由来の装飾Unicodeが予期しないパス区間を作らないようにします。
よくある質問
Unicode NFKC正規化とは何ですか?
NFKCはUAX #15のNormalization Form Compatibility Compositionです。提示形の互換分解のあと正準合成を行い、合字や装飾文字を照合・検索向けの安定した合成文字列に畳みます。
NFKCとNFCはどう違いますか?
NFCは正準等価だけを扱います(例:e+アキュートをéに合成)。NFKCは合成前にfi→fiや全角A→Aなどの互換写像も適用し、等価判定と索引に向きます。
NFKCとNFKDはどう違いますか?
どちらも最初に同じ互換分解を行います。NFKDはそこで止まりアクセントを別の記号のまま残しますが、NFKCは再び合成するため、eと結合用の鋭アクセントは1文字のéになります。
NFKCを使わないほうがよいのはどんなときですか?
合字や全角、装飾文字を見た目どおり残す必要があるとき、たとえば組版した表示用の文章です。NFKCはその違いを意図して消すので、表示にはNFC、比較や検索、重複探しにはNFKCを使います。
全角文字や上付き数字はどうなりますか?
普通の形にそろいます。全角のラテン文字は通常のAからZに、上付きや下付きの数字は普通の数字になり、分数文字は分数用の斜線付きの数字に展開されます。PDFからコピーした文字も入力した文字と一致します。
関連ツール
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/enc/unicode-nfkc \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"file ㎞ ①"}'const res = await fetch("https://api.kit.forhosting.com/enc/unicode-nfkc", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "file ㎞ ①"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/enc/unicode-nfkc",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "file ㎞ ①"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/enc/unicode-nfkc", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"file ㎞ ①"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"file ㎞ ①"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/enc/unicode-nfkc", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"text": "file ㎞ ①"
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "enc.unicode_nfkc",
"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 | リクエストが多すぎます。しばらく待ってから再度お試しください。 |
技術的な注記
エンドポイントは純粋なparse処理で、同じ入力は常に同じ出力になり、ネットワーク呼び出し・モデルトークン・日付依存はありません。検証失敗はinvalid_inputを返し課金されません。成功時は公開の基本料金$0.002です。
NFKCの働きとNFCとの違い
resultは正規化後の文字列、textは入力のエコー、input_lengthとoutput_lengthは正規化前後のJavaScript文字列長、changedは入出力が文字単位で異なるときtrue、standardはUAX 15を示し、ドキュメントと監査をアドホック表ではなくUnicode仕様に合わせます。
入力契約・応答形・エラー動作
値は文字列である必要があります。有限の数値と真偽値はスクリプティングの便宜のため十進またはtrue/falseのテキストに変換します。65536文字を超える文字列はWorkerメモリを予測可能に保つため拒否します。空文字列は有効で、changedがfalseの空に正規化されます。畳み込み前後のU-plusトークンを見るときはコードポイント変換と、検索で大小無視も要るときはcase-foldと組み合わせてください。正規化するUnicode文字列を含む必須フィールドtextを持つJSONオブジェクトをPOSTしてください。input、value、s、dataの別名も受け付け、フォームやSDKが列名を変えずに同じ契約を使えます。オブジェクト、配列、フィールドのないnull本体、NaN、Infinityはinvalid_inputと原因を示すメッセージで失敗します。text欠落は欠落フィールドの明確なメッセージで失敗します。成功時の本体には常にresult、エコーされたtext、文字列NFKCに固定されたform、input_length、output_length、真偽値changed、Unicode NFKC互換合成を示すstandardラベルが含まれます。無効リクエストは課金されず、成功した正規化だけがアイテム価格$0.002を消費します。
実パイプラインでNFKC正規化が効く場面
本機能は純粋parseのティアAなので、成功呼び出しは毎回$0.002で、外向きネットワークなし、同じモジュール上の無料対話経路とバイト一致します。ブラウザでの無料探索と同一結果の有料APIという分割により、一度の貼り付けからCIフィクスチャへアルゴリズムを書き直さずに進めます。ペイロードは長さ上限内に保ち、invalid_inputは再試行可能なサーバ障害ではなく直すべきクライアント不具合として扱い、照合に表示保存型NFCが不適切な既定だったと文書化してください。
連携の活用例
テキスト同一性のgoldenテスト
CIで合字・結合記号・互換スクエアのNFKC出力を固定し、ライブラリが黙って畳み込みを変えられないようにします。
技術的な質問
Unicode NFKC正規化はどの入力を受け付けますか?
必須文字列フィールドtext(別名input、value、s、data)を持つJSONオブジェクトを送ってください。text欠落、非文字列のオブジェクト/配列、非有限数、65536文字超はinvalid_inputです。
応答には何が含まれますか?
resultはNFKC文字列、textは入力のエコー、formは常にNFKC、input_lengthとoutput_lengthは文字数、changedは正規化で変わったときtrue、standardはUAX #15を示します。
Unicode NFKC正規化の料金は?
ブラウザツールは無料です。APIは前払いKIT残高で成功1回あたり$0.002、無効入力は課金されません。