Remover marcas diacríticas Unicode de um texto
Esta ferramenta remove marcas diacríticas combinantes de textos Unicode depois da decomposição canônica.
Executar grátis
Letras acentuadas como é, ñ e ü passam para suas formas básicas, enquanto pontuação, espaços, símbolos, maiúsculas e minúsculas e sistemas de escrita não relacionados permanecem intactos. O resultado é útil quando um índice de busca, identificador, nome de arquivo ou slug precisa de uma representação sem distinção de acentos, sem aplicar transliteração ampla nem regras ortográficas específicas de um idioma. O processamento é determinístico, fica restrito à solicitação e devolve um texto simples que você pode copiar ou encaminhar diretamente para outra etapa de normalização.
O que a transformação faz
O Unicode pode representar muitas letras acentuadas de mais de uma maneira. Um caractere como é pode ser armazenado como um único ponto de código precomposto ou como a letra básica e seguida por um acento agudo combinante. A comparação visual não revela qual representação está presente. Esta capacidade primeiro aplica a decomposição canônica Unicode, normalmente chamada de NFD, para expressar os caracteres que têm decomposição canônica como caracteres básicos seguidos por suas marcas. Em seguida, remove caracteres de todas as categorias de marcas Unicode. Assim, exemplos como café, piñata e Ångström viram cafe, pinata e Angstrom. A ferramenta não converte o texto em minúsculas, não reduz espaços, não remove pontuação nem substitui símbolos. Também não promete transliteração completa para ASCII: letras sem decomposição canônica, como ł, continuam iguais. Esse comportamento restrito é intencional. Ele oferece a você uma operação de normalização previsível, que pode ser combinada com regras separadas de minúsculas, pontuação ou formatação de slugs sem esconder transformações adicionais dentro de uma única operação.
Como criar chaves de busca e slugs estáveis
A busca sem distinção de acentos costuma funcionar melhor quando o valor original e uma chave normalizada são armazenados separadamente. Preserve a grafia original para exibição e envie o texto a esta capacidade para produzir um campo de comparação. Uma consulta pode receber o mesmo tratamento antes da correspondência, permitindo que uma pessoa que digite cafe encontre café sem perder a forma corretamente acentuada exibida nos resultados. Fluxos de geração de slugs podem usar a saída como uma etapa inicial: remova primeiro as marcas, depois aplique minúsculas, substitua espaços e execute a política de pontuação do seu projeto. A ordem importa porque a decomposição expõe marcas que, de outro modo, continuariam ligadas às letras precompostas. A operação é determinística, portanto uma entrada Unicode idêntica sempre produz a mesma saída e pode ser usada com segurança em chaves de cache ou na preparação repetível de dados. Entretanto, normalização não substitui ordenação sensível ao idioma. Os idiomas divergem sobre considerar letras acentuadas variantes ou letras distintas; mantenha o texto original e escolha a comparação sem acentos somente quando isso for adequado ao produto e aos usuários.
Limites, sistemas de escrita e verificação
A regra de remoção abrange marcas combinantes em todo o Unicode, e não apenas a faixa conhecida de acentos usada em idiomas da Europa Ocidental. Isso traz consistência técnica, mas o efeito pode ser significativo em sistemas de escrita nos quais as marcas carregam informações essenciais. Teste conteúdo representativo de cada idioma aceito pelo seu aplicativo antes de aplicar o resultado a buscas, rotas ou campos de identidade. Seletores de variação de emoji e outros caracteres classificados como marcas também podem ser removidos; por isso, trate a saída como uma chave normalizada, não como uma cópia perfeita para exibição. A decomposição canônica é deliberadamente diferente da decomposição de compatibilidade: formas decorativas ou de compatibilidade não são simplificadas de modo geral, e a ferramenta não tenta ser um transliterador universal. Para verificar, compare as grafias precomposta e decomposta da mesma amostra e confirme que os resultados coincidem. Inclua também pontuação, textos não latinos, emojis e letras sem decomposição nos testes. Esses casos mostram se esta operação focada é suficiente ou se o seu fluxo exige outras etapas de normalização escolhidas explicitamente.
Casos de uso
Criar chaves de busca sem acentos
Armazene um valor normalizado adicional para que consultas sem acentos encontrem nomes e termos grafados corretamente.
Preparar texto para slugs de URL
Simplifique letras acentuadas decomponíveis antes de aplicar regras de minúsculas, separadores e pontuação.
Comparar representações Unicode alternativas
Normalize grafias precompostas e formas com marcas combinantes para a mesma representação de letras básicas e faça comparações determinísticas.
Perguntas frequentes
O que esta capacidade remove?
Ela aplica a decomposição canônica Unicode e remove caracteres das categorias de marcas Unicode, incluindo marcas diacríticas combinantes.
Ela converte todo o texto para ASCII?
Não. Caracteres sem decomposição canônica em letras básicas permanecem iguais, assim como pontuação, símbolos e letras de outros sistemas de escrita.
Ela converte para minúsculas ou formata um slug completo?
Não. Conversão para minúsculas, substituição de espaços, filtragem de pontuação e regras de separadores devem ser aplicadas depois como etapas explícitas.
Acentos precompostos e decompostos produzem o mesmo resultado?
Sim. A decomposição canônica acontece antes da remoção das marcas, portanto um é precomposto e um e seguido de acento agudo são simplificados de maneira consistente.
Quanto custa uma solicitação de API?
Cada solicitação de API custa US$ 0,002. A transformação também pode ser usada no executor gerado para navegador, pois não exige rede nem estado do servidor.
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/str/remove-diacritic-marks \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"Crème brûlée — déjà vu in São Paulo"}'const res = await fetch("https://api.kit.forhosting.com/str/remove-diacritic-marks", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "Crème brûlée — déjà vu in São Paulo"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/str/remove-diacritic-marks",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "Crème brûlée — déjà vu in São Paulo"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/str/remove-diacritic-marks", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"Crème brûlée — déjà vu in São Paulo"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"Crème brûlée — déjà vu in São Paulo"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/str/remove-diacritic-marks", 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": "Crème brûlée — déjà vu in São Paulo"
}Exemplo de resposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "str.remove_diacritic_marks",
"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. |