Normaliseur Unicode NFKD
file ① café devient file 1 café avec l'accent détaché : les ligatures s'ouvrent en lettres séparées, les chiffres cerclés deviennent des nombres simples et les lettres accentuées se scindent en base et signe, sans recomposition ensuite. Gratuit dans votre navigateur.
- Gratuit
- Fonctionne dans votre navigateur
- Sans inscription
- Vos données restent sur votre appareil
Lancer gratuitement
Exemple résolu
- Texte
- file ① café
- Résultat
- file 1 café
- Forme
- NFKD
- Longueur de l'entrée
- 10
- Longueur du résultat
- 12
Le texte Unicode code souvent les mêmes caractères abstraits sous plusieurs formes : une ligature, une lettre précomposée accentuée, un chiffre cerclé ou une base plus des marques combinantes. Les moteurs de recherche, bases de données et filtres de sécurité ont besoin d'une forme stable pour que file et file coïncident, que café et café se comparent égaux après décomposition, et que ① ne masque pas un chiffre. La forme de normalisation Unicode KD (NFKD) applique la décomposition de compatibilité : elle développe les ligatures, efface les différences purement présentationnelles et sépare les séquences combinantes sans les recomposer. Cette capacité accepte toute chaîne, exécute l'algorithme NFKD standard et renvoie le résultat normalisé avec des statistiques de longueur et de points de code, plus un booléen indiquant si quelque chose a changé.
Ce que fait NFKD et en quoi il diffère de NFC, NFD et NFKC
La forme de normalisation Unicode KD, définie dans l'annexe 15 de la norme Unicode, est la décomposition de compatibilité. Contrairement à NFD, qui n'applique que des décompositions canoniques comme séparer un é précomposé en e plus accent aigu combinant, NFKD applique aussi des mappages de compatibilité qui suppriment des distinctions de formatage et de présentation non essentielles pour de nombreuses tâches de correspondance.
Les ligatures comme le caractère unique fi deviennent les lettres f et i ; la ligature double ff devient f f ; la triple ffi devient f f i. Chiffres cerclés, chiffres pleine chasse, exposants et caractères de compatibilité similaires s'étendent en équivalents simples. Les séquences combinantes canoniques restent en ordre décomposé, de sorte que café peut devenir cafe suivi d'un accent aigu combinant sur le e.
NFKD ne recompose volontairement pas : cette recomposition relève de NFKC. Choisissez NFKD lorsque vous voulez le dépliage maximal pour l'indexation, la comparaison floue ou le retrait des formes de présentation avant un autre traitement. Choisissez NFC lorsque vous préférez une forme composée compacte pour le stockage et l'affichage.
Ce point de terminaison renvoie toujours form NFKD pour que les clients n'aient pas à deviner l'algorithme. L'implémentation utilise la méthode native String normalize de l'hôte, conforme à UAX 15 et pleinement déterministe sur les moteurs JavaScript modernes.
Où la normalisation Unicode NFKD intervient dans le travail réel
Les systèmes de recherche et de catalogue normalisent titres de produits et libellés visibles pour que la typographie riche en ligatures des outils de design ne crée pas de clés en double : final et final se confondent après NFKD. Les ingénieurs de localisation comparent les chaînes utilisateur après décomposition de compatibilité pour traquer les homographes confus ou vérifier qu'une forme d'affichage n'est que du sucre de présentation sur des lettres simples.
Les pipelines de sécurité et d'identité appliquent souvent NFKD ou NFKC avant hachage ou égalité pour qu'orthographes Unicode alternatives du même nom abstrait ne contournent pas les listes d'autorisation. Les cours de programmation enseignent l'encodage en montrant qu'un caractère visible peut se mapper en plusieurs scalaires après décomposition ; une page dédiée à NFKD sert mieux cette intention de recherche qu'un enfouissement sous Base64 ou convertisseurs de points de code.
Les supports collent des symboles étranges issus de tickets et ont besoin d'une forme dépliée autoritaire pour la reproduction en ingénierie. Si vous avez besoin de listes U-plus de points de code, d'entités HTML ou de réparation mojibake UTF-8, traitez-les comme intentions et pages distinctes, sans surcharger cette page du normaliseur Unicode NFKD.
Cas d’usage
Pliage de clés pour recherche et catalogue
Normalisez titres et libellés de produits avec NFKD pour que ligatures et chiffres cerclés ne créent pas de clés d'index en double à côté de leurs équivalents en texte brut.
Comparaison d'identité et de sécurité
Décomposez par compatibilité noms d'utilisateur et jetons avant égalité ou hachage pour que les variantes de présentation ne contournent pas les filtres qui attendent des formes ASCII-friendly.
Questions fréquentes
Qu'est-ce que Unicode NFKD ?
NFKD est la forme de normalisation KD de l'annexe 15 de la norme Unicode : décomposition de compatibilité complète. Elle déplie ligatures et caractères de compatibilité et sépare les marques combinantes, sans les recomposer.
En quoi NFKD diffère-t-il de NFKC ?
Les deux appliquent la décomposition de compatibilité. NFKC recompose ensuite si possible en caractères composés. Cet outil renvoie uniquement NFKD (forme décomposée, sans recomposition).
file devient-il file ?
Oui. La ligature fi U+FB01 est un caractère de compatibilité ; NFKD la mappe en f + i, donc file se normalise en file avec changed à true.
Que se passe-t-il en cas d'entrée invalide ?
Les échecs de validation ne sont pas facturés.
Quel est le coût ?
L'outil navigateur est gratuit et s'exécute en local.
Outils associés
Pour les développeurs — accès API
Tout sur cette page est disponible par programmation. Cette section s'adresse aux équipes qui veulent l'intégrer à leurs systèmes ; les autres peuvent simplement utiliser l'outil ci-dessus.
Endpoint
Authentification par jeton Bearer : un seul POST met la tâche en file d’attente, et le résultat vous parvient par webhook ou lien signé.
Appeler depuis votre stack
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)Exemple de requête
{
"text": "file ① café"
}Exemple de réponse
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "enc.unicode_nfkd",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L’API est asynchrone : chaque appel renvoie un task_id immédiatement, puis vous interrogez l’état à raison d’une requête par seconde.
Tarifs
Le prix est publié, sans tokens ni crédits. Une tâche qui échoue n’est pas facturée.
Erreurs
| HTTP | Code | Signification |
|---|---|---|
401 | unauthorized | Clé API absente ou invalide : vérifiez l’en-tête Authorization. |
402 | insufficient_balance | Solde insuffisant : rechargez votre compte pour lancer cette tâche. |
404 | unknown_type | Type de tâche inconnu : vérifiez le champ type de votre requête. |
429 | rate_limited | Trop de requêtes : ralentissez la cadence, puis réessayez. |
Notes techniques
Une entrée invalide ou absente échoue avec invalid_input afin que les charges incorrectes n'inventent pas de texte. L'outil gratuit du navigateur et l'API payante partagent le même module pur, de sorte que démonstrations, pipelines de localisation et webhooks de production s'accordent toujours.
Contrat d'entrée, champs de réponse et comportement d'erreur
Les chaînes vides sont valides et renvoient un résultat NFKD vide avec changed à false. Les chaînes de plus de soixante-cinq mille cinq cent trente-six unités de code UTF-16 échouent pour qu'un collage incontrôlé n'épuise pas le worker. L'absence de text échoue immédiatement sans facturation. Envoyez un objet JSON avec un champ chaîne obligatoire nommé text. Les alias input, value, s et data sont acceptés lorsque text est absent, comme pour les outils d'encodage frères. Les nombres et booléens sont convertis en forme décimale ou en true ou false ; objets, tableaux, null, NaN et Infinity sont rejetés avec invalid_input en nommant le problème. En cas de succès le corps répète le text d'origine, fournit result comme chaîne normalisée NFKD, fixe form à la constante NFKD, met changed à true lorsque result diffère de text, indique input_length et result_length en unités UTF-16, indique input_code_points et result_code_points en scalaires Unicode pour ne pas mal compter les emoji ni les caractères hors BMP, et inclut une courte étiquette de norme pointant vers UAX 15. Exemple : le mot ligaturé file devient file avec changed true et un result_length plus grand car une unité est devenue quatre. Le prix des appels API réussis est la base publiée de $0.002 par élément ; les échecs de validation ne consomment pas le solde prépayé.
Où la normalisation Unicode NFKD intervient dans le travail réel
Comme cette capacité est un moteur parse pur, le prix API est la base publiée de $0.002 par élément réussi et l'échec de validation ne consomme pas le solde.
Cas d'intégration
Fixtures de localisation et d'enseignement
Générez des chaînes décomposées stables pour tests golden, couverture de glyphes et démonstrations en classe des mappages de compatibilité UAX #15.