emoji de urna eletrônica: como o Unicode decide o que entra

emoji de urna eletrônica: como o Unicode decide o que entra

Você já tentou mandar um emoji de urna eletrônica no WhatsApp e percebeu que o mais perto que chega é o 🗳️ — uma caixa de voto com cédula de papel. Não é bug, é arquitetura. E o motivo tem mais a ver com engenharia de software, governança de padrões e geopolítica do que com o objeto em si. Vou destrinchar isso na perspectiva de quem constrói software e precisa entender como decisões do Unicode Consortium impactam produtos que chegam a milhões de pessoas.

O que o Terra revelou e o que ficou de fora

Segundo o Terra.com.br, o Unicode Consortium — o consórcio formado por Apple, Google, Microsoft, Meta, Adobe e outras — é quem decide quais emojis existem, como eles são desenhados e em qual versão entram. Questionadas, nenhuma das empresas quis se manifestar oficialmente sobre a ausência de um emoji de urna eletrônica brasileira.

Essa omissão é interessante do ponto de vista corporativo: nenhuma empresa quer se meter em briga política num órgão de padronização. Mas para o dev, o ponto importante é entender como um emoji nasce, por que ele demora anos para ser aprovado e onde mora, tecnicamente, a “decisão” de incluir ou não um glifo.

O codepoint existe, mas o desenho não

O emoji 🗳️ que você usa hoje corresponde ao codepoint U+1F5F3, com nome oficial Ballot Box with Ballot. Ele foi incluído no Unicode 7.0, lançado em junho de 2014, antes do ciclo eleitoral de 2016 no Brasil. A descrição no padrão é genérica — uma caixa com uma cédula — o que por si só já revela um viés: o consórcio padroniza símbolos com apelo universal, não regional.

Quando você digita 🗳️ no seu editor, o que vai para a memória é uma sequência de bytes UTF-16 (no caso do JavaScript/TypeScript em ambiente Windows) ou UTF-8 (Linux/macOS). A renderização, por sua vez, é responsabilidade da fonte do sistema — Apple Color Emoji, Noto Color Emoji, Segoe UI Emoji, Twemoji da Meta. Ou seja: o mesmo codepoint vira desenhos completamente diferentes dependendo de onde é renderizado.

Por que um emoji de urna eletrônica nunca passou (e provavelmente não vai passar)

Existem três barreiras técnicas e políticas concretas.

1. Critério de “frequência de uso esperado”

O subcomitê de emojis do Unicode usa critérios publicados, e o primeiro deles é justamente expected frequency of use. Um emoji precisa demonstrar uso antes da aprovação — pesquisas, dados de adoção, exemplos em mídia. Como aponta a reportagem do Terra, 92% da população online usa emojis, e o consórcio usa isso para justificar volume, mas não para aprovar qualquer coisa.

Para um dev, isso significa: o processo de aprovação é essencialmente um RFC com critérios de seleção. E como qualquer RFC de padrão aberto (W3C, IETF, WHATWG), o que não tem proponente com dados consistentes não avança.

2. Especificidade regional vs. universalidade

Bandeira do Brasil existe 🇧🇷. Mas é uma exceção: o Unicode só adicionou bandeiras nacionais após pressão da proposta UTC #287, e mesmo assim como códigos de região (ISO 3166), não como emojis “desenhados”. Uma urna eletrônica é um equipamento específico de um único país — o Brasil. O risco do consórcio é abrir precedente para centenas de pedidos análogos (urnas da Índia, máquinas dos EUA, sistemas da Alemanha etc.) e inflar o padrão sem ganho real de comunicação.

3. Geopolítica embutida em software

Nenhuma empresa-membro quer aprovar um símbolo que possa ser interpretado como endosso a um sistema eleitoral específico. É a mesma lógica que fez o Unicode postergar por anos o símbolo de bazuca 🪨, de seringa 🩸, ou de qualquer coisa remotamente associada a conflito. Decisão técnica vira decisão política, e em padrões internacionais, política trava.

Na Prática: como devs lidam com isso no código

Se você está construindo um app, bot, dashboard ou sistema que precise representar visualmente o voto eletrônico brasileiro, você tem três caminhos reais. Vou mostrar o terceiro com código funcional.

Caminho 1 — Usar o 🗳️ mesmo (e contextualizar com texto)

É o que a maioria faz. Funciona, mas perde precisão semântica. Em UX, isso é chamado de metáfora visual aproximada.

Caminho 2 — Criar um asset próprio (SVG/PNG)

Recomendado quando o sistema é fechado ou quando você controla a renderização (webview próprio, PWA instalado). Perde interoperabilidade, mas ganha fidelidade visual.

Caminho 3 — Combinar o emoji base com variation selectors e ZWJ

Aqui entra a engenharia real. O Unicode permite combinar emojis via Zero-Width Joiner (ZWJ, U+200D) e Variation Selectors (VS15, VS16). Você pode, por exemplo, montar sequências que representem conceitos compostos.

Veja um exemplo funcional em JavaScript para inspecionar como um emoji é representado internamente — útil para debug de pipelines de moderação, busca textual ou contagem de caracteres:

// Inspecionando o emoji de urna/voto no JavaScript
const emoji = '🗳️';

// 1. Como string de codepoints
const codePoints = [...emoji].map(c => 'U+' + c.codePointAt(0).toString(16).toUpperCase());
console.log('Codepoints:', codePoints);
// Saída esperada: ['U+1F5F3', 'U+FE0F']
//                       ^ballot box   ^VS16 (força apresentação como emoji)

// 2. Comprimento real (surrogate pairs)
console.log('.length:', emoji.length); // 3 — dois code units UTF-16 + VS16

// 3. Tamanho em bytes UTF-8
const bytes = new TextEncoder().encode(emoji);
console.log('Bytes UTF-8:', bytes.length); // 7

// 4. Normalização — fundamental para busca e deduplicação
import { normalize } from 'node:util';
const composed = '🗳️';
const decomposed = '🗳︎️'; // sem VS16, com VS15 (text presentation)
console.log('Normalizado NFC:', normalize('NFC', composed) === normalize('NFC', decomposed));
// Pode variar — é exatamente por isso que produção precisa normalizar antes de comparar

// 5. Detecção de "emoji-like" em pipelines de moderação
const emojiRegex = /\p{Extended_Pictographic}/u;
console.log('É pictográfico?', emojiRegex.test(emoji)); // true

O ponto crítico: o VS16 (U+FE0F) força a apresentação colorida de emoji. Sem ele, alguns sistemas mostram o glifo em estilo textual preto e branco. Se você está construindo busca, indexação ou normalização de strings para banco de dados, ignorar isso causa bugs sutis — o mesmo “emoji” tem representações binárias diferentes.

Erros comuns que devs cometem com emojis em produção

Já vi esses bugs em sistemas reais — produção, clientes pagantes, logs corrompidos. Anota aí.

❌ Contar caracteres com .length

No JavaScript, '🗳️'.length retorna 3, não 1. Isso quebra validação de tamanho de campo, paginação e rate limiting. Use [...str] ou Array.from(str) para iterar por codepoints reais, ou Intl.Segmenter para segmentação linguística completa.

❌ Comparar strings sem normalizar

🗳️ (com VS16) e 🗳︎️ (com VS15) podem ser “o mesmo emoji” para o usuário, mas são bytes diferentes. Antes de salvar em banco, deduplicar ou fazer match, normalize com NFC. Em Python, unicodedata.normalize('NFC', s). Em JS, polyfill via unorm ou String.prototype.normalize().

❌ Renderizar emoji em SVG sem fallback

SVGs exportados de ferramentas como Figma frequentemente embutem emojis como texto. Em muitos renderizadores server-side (ex.: resvg, rsvg-convert), a fonte de emoji não está disponível e o glifo vira quadrado vazio. Para PDFs de boletim de urna, por exemplo, isso é desastroso.

❌ Subestimar ZWJ sequences em buscas

Emojis como 👨‍💻 (homem programador) são 7 codepoints unidos por ZWJ. Seu regex de “palavrão” ou “termo proibido” precisa tratar a sequência inteira, não cada glifo isolado. Use \p{Extended_Pictographic}(\u200D\p{Extended_Pictographic})* como base.

❌ Assumir que emoji do iOS renderiza igual no Android

Meta usa Twemoji, Apple usa Apple Color Emoji, Google usa Noto. O desenho da 🗳️ varia em pelo menos quatro estilos. Se seu produto precisa de consistência visual (dashboards, recibos, materiais oficiais), converta emojis para PNG/SVG próprio usando bibliotecas como node-canvas ou APIs de renderização headless.

O processo real de propor um emoji (e por que ele é tão difícil)

Se algum dia alguém quiser propor o emoji de urna eletrônica de verdade, o caminho é este:

  1. Escrever uma proposta formal no formato do Unicode (modelo público em unicode.org/emoji/proposals.html).
  2. Incluir dados de uso: frequência em redes, menções em mídia, justificativa de relevância.
  3. Justificar que o conceito não é coberto por nenhum emoji existente (🗳️ cobre “voto impresso”, não “máquina de votar digital”).
  4. Submeter ao subcomitê de emojis — eles votam, podem aprovar, rejeitar ou devolver para revisão.
  5. Se aprovado, aguardar 1 a 2 anos até a próxima versão do Unicode e mais meses até rollout nas plataformas.

Total: 2 a 4 anos entre proposta e uso em massa. Para algo politicamente sensível, multiplique por mais um fator de relutância corporativa. É exatamente por isso que projetos como o Regional Indicator Symbols (bandeiras) só saíram após anos de lobby.

FAQ — perguntas que devs realmente fazem

Por que o 🗳️ é o único emoji relacionado a voto?

Porque o Unicode só formalizou esse conceito uma vez, em 2014. Não há nenhum outro codepoint aprovado que represente votação ou equipamento eleitoral. Toda urna — eletrônica, manual, touchscreen — cai na mesma abstração ou em nenhum glifo.

Posso forçar um emoji customizado de urna eletrônica no meu app?

Sim, de três formas: SVG inline para web, font customizada com cmap próprio para apps nativos, ou PNG/SVG server-rendered para PDFs e emails. Cada uma tem trade-offs de cache, performance e acessibilidade.

Como contar emojis corretamente em formulários?

Use Intl.Segmenter('pt', { granularity: 'grapheme' }) em JavaScript ou grapheme em Python. Ambos tratam ZWJ, VS16 e surrogate pairs corretamente. Nunca use .length direto.

Qual é a diferença entre emoji pictográfico e emoji textual?

O VS15 força apresentação textual (preto/branco, mesma métrica que texto normal). O VS16 força apresentação colorida como emoji. A mesma sequência de codepoints sem nenhum deles geralmente segue a Default Emoji Presentation definida pelo Unicode, que é emoji por padrão para Extended_Pictographic.

Vale a pena submeter uma proposta de emoji de urna eletrônica?

Se o objetivo é impacto simbólico, talvez. Se o objetivo é resolver um problema real de UX, não — use asset próprio. O ROI de esperar 3 anos por aprovação de um órgão internacional é baixíssimo quando você pode desenhar o ícone em um dia.


🚀 Conheça o yurideveloper.com.br

Gostou? Me segue no GitHub e deixa um comentário se tiver dúvida ou quiser aprofundar algum ponto.

Y

Yuri Sousa

Front-End Developer / Designer

Desenvolvedor apaixonado por criar experiências digitais acessíveis e visualmente perfeitas. Escrevo sobre desenvolvimento web, design e tecnologia.