Normalizador Unicode NFKD
file ① café vira file 1 café com o acento separado: ligaduras se abrem em letras soltas, dígitos em círculo viram números comuns e letras acentuadas se dividem em base e marca, sem nada ser recomposto depois. Grátis no seu navegador.
- Grátis
- Funciona no seu navegador
- Sem cadastro
- Seus dados não saem do seu aparelho
Executar grátis
Exemplo resolvido
- Texto
- file ① café
- Resultado
- file 1 café
- Forma
- NFKD
- Comprimento da entrada
- 10
- Comprimento do resultado
- 12
O texto Unicode costuma codificar os mesmos caracteres abstratos de várias formas: uma ligadura, uma letra pré-composta com acento, um dígito em círculo ou uma base com marcas combinantes. Mecanismos de busca, bancos de dados e filtros de segurança precisam de uma forma estável para que file e file coincidam, café e café fiquem iguais após a decomposição, e ① não oculte um dígito. A Forma de Normalização Unicode KD (NFKD) aplica a decomposição de compatibilidade: expande ligaduras, remove diferenças só de apresentação e separa sequências combinantes sem recompor. Esta capacidade aceita qualquer string, executa o algoritmo NFKD padrão e devolve o resultado normalizado com estatísticas de comprimento e pontos de código, mais um booleano que indica se algo mudou.
O que o NFKD faz e como difere de NFC, NFD e NFKC
A Forma de Normalização Unicode KD, definida no Anexo 15 do padrão Unicode, é a decomposição de compatibilidade. Diferente do NFD, que só aplica decomposições canônicas como separar um é pré-composto em e mais acento agudo combinante, o NFKD também aplica mapeamentos de compatibilidade que removem distinções de formatação e apresentação não essenciais para muitas tarefas de correspondência. Ligaduras como o caractere único fi viram as letras f e i; a ligadura dupla ff vira f f; a tripla ffi vira f f i.
Números em círculo, dígitos de largura total, sobrescritos e caracteres de compatibilidade semelhantes expandem-se para equivalentes simples. Sequências combinantes canônicas permanecem em ordem decomposta, de modo que café pode ficar como cafe seguido de um acento agudo combinante sobre o e. O NFKD deliberadamente não recompõe: essa recomposição pertence ao NFKC.
Escolha NFKD quando quiser o máximo desdobramento para indexação, comparação difusa ou remoção de formas de apresentação antes de outro processamento. Escolha NFC quando preferir uma forma composta compacta para armazenamento e exibição. A implementação usa o método nativo String normalize da linguagem hospedeira, que segue UAX 15 e é totalmente determinístico em motores JavaScript modernos.
Onde a normalização Unicode NFKD aparece no trabalho real
Sistemas de busca e catálogo normalizam títulos de produto e rótulos visíveis para que tipografia com ligaduras de ferramentas de design não crie chaves duplicadas: final e final colapsam após NFKD. Engenheiros de localização comparam strings de usuário após decomposição de compatibilidade ao caçar homógrafos confusos ou verificar que uma forma de exibição é apenas açúcar de apresentação sobre letras simples. Pipelines de segurança e identidade costumam aplicar NFKD ou NFKC antes de hash ou igualdade para que grafias Unicode alternativas do mesmo nome abstrato não contornem listas de permissão.
Cursos de programação ensinam codificação mostrando que um caractere visível pode mapear-se a vários escalares após decomposição; uma landing dedicada a NFKD atende melhor essa intenção de busca do que enterrar o tema sob Base64 ou conversores de code points. Mesas de suporte colam símbolos estranhos de tickets e precisam de uma forma desdobrada autorizada para reprodução em engenharia. Se precisar de listas U-plus de code points, entidades HTML ou reparo mojibake UTF-8, trate-os como intenções e landings separadas, sem sobrecarregar esta página do normalizador Unicode NFKD.
Casos de uso
Dobramento de chaves em busca e catálogo
Normalize títulos e rótulos de produto com NFKD para que ligaduras e dígitos em círculo não criem chaves de índice duplicadas ao lado dos equivalentes em texto simples.
Comparação de identidade e segurança
Decomponha por compatibilidade nomes de usuário e tokens antes de igualdade ou hash para que variantes de apresentação não contornem filtros que esperam formas amigáveis a ASCII.
Perguntas frequentes
O que é Unicode NFKD?
NFKD é a Forma de Normalização KD do Anexo 15 do padrão Unicode: decomposição completa de compatibilidade. Desdobra ligaduras e caracteres de compatibilidade e separa marcas combinantes, sem recompor.
Como o NFKD difere do NFKC?
Ambos aplicam decomposição de compatibilidade. O NFKC depois recompõe quando possível em caracteres compostos. Esta ferramenta devolve apenas NFKD (forma decomposta, sem recomposição).
file vira file?
Sim. A ligadura fi U+FB01 é um caractere de compatibilidade; o NFKD mapeia para f + i, de modo que file normaliza para file com changed true.
Quanto custa?
A ferramenta do navegador é gratuita e roda localmente.
Por que o resultado fica mais longo que o texto original?
Porque cada ligadura vira várias letras e cada acento vira uma marca à parte. No exemplo file ① café, os 10 code points de entrada viram 12 na saída, embora o texto pareça quase igual na tela.
Ferramentas relacionadas
Para desenvolvedores — acesso via API
Tudo nesta página está disponível via API. Esta seção é para equipes que querem integrar a ferramenta aos próprios sistemas; quem não precisa disso pode simplesmente usar a ferramenta acima.
Endpoint
Autenticação por token Bearer. Um único POST coloca a tarefa na fila; o resultado chega por webhook ou link assinado.
Chame do seu código
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)Exemplo de requisição
{
"text": "file ① café"
}Exemplo de resposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "enc.unicode_nfkd",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}A API é assíncrona: cada chamada devolve um task_id na hora. Se preferir polling, consulte o status a até 1 requisição por segundo.
Preço
Preço publicado, sem tokens nem créditos escondidos. Tarefa que falha não é cobrada.
Erros
| HTTP | Código | O que significa |
|---|---|---|
401 | unauthorized | Token ausente ou inválido. Confira o header Authorization. |
402 | insufficient_balance | Saldo insuficiente para esta tarefa. Faça uma recarga e tente de novo. |
404 | unknown_type | Esse tipo de tarefa não existe. Confira o campo type no catálogo. |
429 | rate_limited | Muitas requisições em pouco tempo. Espere um instante e tente de novo. |
Notas técnicas
Entrada inválida ou ausente falha com invalid_input para que cargas ruins não inventem texto. A ferramenta gratuita do navegador e a API paga compartilham o mesmo módulo puro, de modo que demos, pipelines de localização e webhooks de produção sempre concordam.
O que o NFKD faz e como difere de NFC, NFD e NFKC
Este endpoint sempre devolve form NFKD para que os clientes não precisem adivinhar o algoritmo.
Contrato de entrada, campos de resposta e comportamento de erro
Strings vazias são válidas e devolvem um resultado NFKD vazio com changed false. Strings com mais de sessenta e cinco mil quinhentas e trinta e seis unidades de código UTF-16 falham para que colas descontroladas não esgotem o worker. Envie um objeto JSON com um campo de string obrigatório chamado text. Os aliases input, value, s e data são aceitos quando text está ausente, como em ferramentas irmãs de codificação. Números e booleanos são convertidos para a forma decimal ou true ou false; objetos, arrays, null, NaN e Infinity são rejeitados com invalid_input nomeando o problema. Em sucesso o corpo ecoa o text original, fornece result como a string normalizada NFKD, define form como a constante NFKD, define changed como true quando result difere de text, informa input_length e result_length como contagens de unidades UTF-16, informa input_code_points e result_code_points como contagens de escalares Unicode para não subcontar emoji nem caracteres fora do BMP, e inclui um rótulo curto do padrão apontando para UAX 15. Exemplo: a palavra com ligadura file vira file com changed true e result_length maior porque uma unidade se tornou quatro. text ausente falha imediatamente sem cobrança. O preço de chamadas API bem-sucedidas é a base publicada de US$ 0,002 por item; falhas de validação não consomem saldo pré-pago.
Onde a normalização Unicode NFKD aparece no trabalho real
Como esta capacidade é um motor parse puro, o preço da API é a base publicada de US$ 0,002 por item bem-sucedido e validação falha não consome saldo.
Casos de integração
Fixtures de localização e ensino
Gere strings decompostas estáveis para testes golden, cobertura de glifos e demos em sala dos mapeamentos de compatibilidade do UAX #15.
Perguntas técnicas
O que acontece com entrada inválida?
A solicitação falha com invalid_input. text ausente, objetos não string, números não finitos e strings grandes demais são rejeitados com mensagem clara. Falhas de validação não são cobradas.