Remover seletores de variação Unicode
“Hello ❤️ world ☺️” perde os 2 seletores ocultos e volta como “Hello ❤ world ☺”, com 15 caracteres em vez de 17. Letras, emojis, pontuação e espaços ficam; só saem os interruptores de estilo invisíveis. 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
- Hello ❤️ world ☺️
- Resultado
- Hello ❤ world ☺
- Comprimento
- 15
- Comprimento original
- 17
- Removido
- 2
Seletores de variação Unicode são caracteres invisíveis que ficam ao lado de glifos base e dizem aos renderizadores se devem mostrar apresentação emoji, apresentação de texto ou uma variante específica de glifo. Copiar e colar de apps de mensagem, feeds sociais e ferramentas de design costuma deixar U+FE0F (estilo emoji) ou U+FE0E (estilo texto) após corações, estrelas e outros símbolos, e documentos CJK podem incorporar pontos do Variation Selectors Supplement em sequências ideográficas. Esses seletores quebram checagens de igualdade de strings, inflacionam comprimentos, confundem índices de busca e geram diffs misteriosos quando duas strings parecem idênticas na tela. Esta ferramenta percorre o seu texto por code point Unicode, remove todos os seletores de variação nos intervalos padrão e devolve a string limpa com contagem de removidos e flags de mudança. Letras base, emoji, pontuação e espaços permanecem: só os interruptores invisíveis são retirados. Entrada vazia é rejeitada com erro de validação claro para que clientes notem campos ausentes.
Como funciona a remoção de seletores de variação
Um seletor de variação não é uma letra visível; é um code point sem avanço de espaço que modifica a apresentação do caractere precedente. O bloco principal vai de U+FE00 a U+FE0F: Variation Selectors 1 a 16. Nesse bloco, U+FE0E pede apresentação de texto (monocromática) para símbolos com suporte a emoji, e U+FE0F pede apresentação emoji (colorida).
Um coração seguido de FE0F costuma renderizar como emoji colorido, enquanto a mesma base sozinha ou com FE0E pode aparecer como dingbat simples, conforme a fonte e a plataforma. Um segundo bloco, U+E0100 a U+E01EF (Variation Selectors Supplement), suporta sequências de variação ideográfica para caracteres CJK quando uma forma de glifo específica é necessária. Esta capacidade remove ambos os blocos por completo.
A implementação percorre a string com um iterador de code points para que caracteres astrais do Supplement sejam reconhecidos como unidades únicas, e não como pares substitutos partidos. Cada code point em qualquer intervalo VS é descartado e contado; todo o restante é anexado ao resultado. Strings vazias falham antes do percurso.
Como o caminho é parse puro sobre strings, a latência permanece submilissegundo em formulários típicos e o modelo de custo publicado é analítico, não baseado em tokens de modelo.
O que você envia e o que recebe de volta
Envie um único campo obrigatório chamado text contendo a string não vazia que deseja limpar. Números e booleanos são convertidos para formas decimais ou true/false; objetos, arrays, NaN e Infinity são rejeitados. Quando a entrada já não continha seletores de variação, result é igual a text, changed é false e removed é zero — útil como detector de no-op em guardas ETL e testes unitários.
Checagens clássicas: um coração com FE0F final vira o coração nu, um smiley com FE0F perde o seletor de apresentação e mantém o emoji base, prosa mista em que só os seletores invisíveis somem, e texto CJK com seletores Supplement reduzido a ideógrafos base.
Onde ferramentas de remover seletores de variação aparecem no trabalho real
Equipes de produto e mensagens normalizam conteúdo gerado por usuários para que checagens de igualdade e detecção de duplicatas ignorem interruptores de apresentação invisíveis que o usuário nunca quis digitar. Sistemas de busca e tagging removem seletores de variação de consultas e títulos armazenados para que filtros coincidam independentemente de um coração ter chegado com FE0F do iOS ou sem ele de um editor de texto simples.
Equipes de conteúdo e localização preparam strings estáveis para nomes de arquivo, segmentos de URL (quando não usam ferramenta de slug dedicada), assuntos de e-mail em relays exigentes e arquivos CSV abertos em ferramentas que corrompem ou recodificam Unicode. Se depois precisar remover caracteres de largura zero, acentos, normalização Unicode completa (NFD/NFC) ou conversão de shortcodes emoji, trate-os como intenções de busca e landings separadas, sem sobrecarregar esta página de remove-variation-selectors.
Casos de uso
Normalizar emoji de chat e APIs sociais
Remova seletores de apresentação FE0F/FE0E para que corações e símbolos comparem iguais entre plataformas que injetam estilos de variação diferentes.
Perguntas frequentes
O que faz remover seletores de variação?
Remove os code points de seletores de variação Unicode (U+FE00–U+FE0F e U+E0100–U+E01EF) do seu texto —incluindo os comuns FE0F emoji e FE0E texto— e devolve a string limpa mais uma contagem de removidos.
O que acontece se eu enviar texto vazio?
Strings vazias são rejeitadas para que clientes notem campos ausentes em vez de receber um resultado vazio em silêncio.
Remove espaços de largura zero ou acentos?
Não. Apenas seletores de variação são removidos. Espaços de largura zero, marcas bidi, diacríticos combinantes e outros caracteres invisíveis exigem ferramentas separadas.
Texto já limpo será alterado?
Não. Se não houver seletores de variação, result é igual ao texto original, changed é false e removed é zero.
O coração continua colorido depois da limpeza?
Depende da fonte e do aparelho. Sem o seletor que pede o estilo emoji, alguns sistemas mostram o coração como um símbolo simples, sem cor, e outros continuam exibindo o emoji colorido.
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/str/remove-variation-selectors \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"Hello ❤️ world ☺️"}'const res = await fetch("https://api.kit.forhosting.com/str/remove-variation-selectors", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "Hello ❤️ world ☺️"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/str/remove-variation-selectors",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "Hello ❤️ world ☺️"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/str/remove-variation-selectors", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"Hello ❤️ world ☺️"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"Hello ❤️ world ☺️"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/str/remove-variation-selectors", 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": "Hello ❤️ world ☺️"
}Exemplo de resposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "str.remove_variation_selectors",
"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
Como funciona a remoção de seletores de variação
Não há chave de locale, amostragem aleatória nem chamada de rede: a mesma entrada sempre produz o mesmo JSON. Payloads maiores que o limite documentado também falham com invalid_input para que uma única requisição não monopolize a memória do Worker.
O que você envia e o que recebe de volta
Aliases como input, value, data, s, message, string, content e body são aceitos ao conectar clientes antigos. Em sucesso a resposta ecoa o text original, o result limpo, o length do resultado, original_length, um booleano changed, removed como contagem de code points de seletores de variação removidos, e operation com valor remove_variation_selectors. Use o formulário gratuito do navegador para colar e copiar com rapidez, e chame o mesmo contrato a partir de scripts ao normalizar colunas CSV, exportações de chat ou payloads de API em lote. O preço das chamadas API bem-sucedidas é a base publicada de US$ 0,002 por item; falhas de validação, inclusive texto vazio, não consomem saldo pré-pago.
Onde ferramentas de remover seletores de variação aparecem no trabalho real
Engenheiros de dados que limpam exportações de CRM, colunas de planilhas e dumps de API sociais costumam forçar campos de texto livre por um strip de VS antes de joins em chaves suaves ou cargas em warehouses que indexam por string exata. Como esta capacidade é um motor de parse puro, o preço de API é a base publicada de US$ 0,002 por item bem-sucedido e validação falha não consome saldo.
Casos de integração
Limpar exportações CSV e texto livre
Elimine caracteres VS ocultos de colagens em massa e dumps de API antes de joins, checagens de unicidade ou cargas em warehouse.
Testes golden e chaves de busca estáveis
Torne fixtures e rótulos de faceta independentes de interruptores de apresentação invisíveis para que testes e filtros permaneçam determinísticos.
Perguntas técnicas
Como é cobrada a remoção de seletores de variação?
O widget no navegador executa de graça no seu dispositivo. Chamadas à API debitam o monedero KIT pré-pago a US$ 0,002 por item válido com seletores limpos; entradas rejeitadas não geram cobrança.