ToolActToolAct

Conversor Unicode

Converta entre texto e codificação Unicode com múltiplos formatos de saída

Entrada
Caracteres: 0
Code Points: 0
Saída
Caracteres: 0

Detalhes dos Code Points (clique para copiar)

Digite texto para exibir code points para cada caractere

O que é Unicode?

Unicode é um padrão da indústria em computação que codifica a maioria dos sistemas de escrita do mundo. Cada caractere Unicode tem um identificador numérico único chamado Code Point, tipicamente representado em hexadecimal com prefixo U+, como U+4E2D para o caractere chinês '中'. A ferramenta de conversão Unicode pode converter texto em vários formatos Unicode, bem como converter codificação Unicode de volta para texto. Unicode descreve caracteres por code points, enquanto codificações como UTF-8 definem como esses pontos são armazenados em bytes. Isso importa ao analisar texto com emojis, acentos, caracteres CJK, símbolos, controles ou escritas mistas. Um caractere visível pode ter vários code points, especialmente com marcas combinadas, seletores de variação ou sequências emoji. A ferramenta ajuda a depurar mojibake, normalização, escapes, caracteres invisíveis e diferenças entre contagem de caracteres e tamanho em bytes.

Como Usar

Passos

  1. Insira ou cole o texto a converter na caixa de entrada
  2. Selecione a direção da conversão: Texto para Unicode ou Unicode para Texto
  3. Escolha o formato de saída: \uXXXX ou U+XXXX (disponível ao codificar)
  4. Os resultados aparecem automaticamente, com cópia em um clique ou troca de entrada/saída

Observações sobre Codificação

  • Os formatos de escape Unicode são úteis para código e depuração, mas podem reduzir a legibilidade em textos comuns.
  • Ao decodificar, verifique os pares substitutos e a saída de emojis; separar um par pode gerar caracteres quebrados.

Casos de uso

Codificar texto em formatos de escape UnicodeConverta texto em sequências \uXXXX no estilo JavaScript ou notação de code point U+XXXX. Caracteres acima de U+FFFF são representados como pares substitutos no modo de escape enquanto a grade de detalhes ainda mostra o code point completo. A conversão é uma operação local de String.prototype.codePointAt e fromCodePoint.
Decodificar escapes Unicode de volta para texto legívelDecodifique padrões \uXXXX, \u{. } e U+XXXX em caracteres e copie o texto restaurado. Ajuda a inspecionar logs, strings JSON, arquivos de localização e trechos escapados de código ou APIs. A decodificação acontece internamente na página.
Inspecionar code points individuaisCada caractere de entrada é listado com seu caractere visível e valor U+, e clicar em um tile copia aquele code point. A contagem de caracteres e a contagem de code points são exibidas separadamente, o que importa para emojis e outros caracteres multi-unidade.
Identificar mojibake e strings com codificação duplaCole strings que parecem 'é' ou '中文', decodifique-as e recodifique com a codificação original suspeita (UTF-8 vs Latin-1) para confirmar se a fonte teve codificação dupla em vez de corrupção na captura.
Contar emojis e marcas combinadas como code pointsUse a grade de code points para identificar emojis de família, sequências de bandeiras e diacríticos combinados que ocupam múltiplas posições. A contagem separada de caracteres e code points esclarece por que uma string de '1 caractere' pode consumir 7 unidades UTF-16.

Princípio técnico

O Padrão Unicode (ISO/IEC 10646) atribui um code point numérico único a cada caractere em 17 planos (U+0000 a U+10FFFF). O Plano Multilinguístico Básico (BMP, Plano 0) cobre U+0000–U+FFFF e contém quase todos os sistemas de escrita modernos, incluindo Ideogramas CJK Unificados. Os planos suplementares (1–16) contêm escritas históricas, CJK raro, emoji e caracteres de uso especial. A ferramenta converte entre texto legível e duas representações orientadas a máquina: sequências de escape \uXXXX no estilo JavaScript e a notação padrão U+XXXX. UTF-16 é a codificação interna das strings em JavaScript — cada caractere BMP é armazenado como uma única unidade de código de 16 bits igual ao seu code point, enquanto caracteres suplementares (U+10000 e acima) são codificados como pares substitutos: 0x10000 é subtraído do code point para gerar um valor de 20 bits, que é então dividido em um substituto alto de 10 bits (0xD800 + ((cp - 0x10000) >> 10)) e um substituto baixo de 10 bits (0xDC00 + ((cp - 0x10000) & 0x3FF)). O modo de codificação da ferramenta detecta code points suplementares via String.prototype.codePointAt() e gera o escape \u correto com dois elementos para o formato \uXXXX. Para o formato U+XXXX, o code point completo é exibido diretamente. O modo de decodificação analisa três sintaxes: \uXXXX (quatro dígitos hexadecimais, apenas BMP), \u{XXXXX} (sintaxe de chaves do ES6 suportando toda a faixa Unicode) e U+XXXX (a notação padrão com hexadecimal de comprimento variável). A regex /\\u\{([0-9a-fA-F]+)\}/g trata os escapes com chaves e os envia para String.fromCodePoint(), enquanto /\\u([0-9a-fA-F]{4})/g trata os escapes tradicionais via String.fromCharCode(). A mistura correta dos dois reconstrói pares substitutos quando um caractere suplementar foi codificado como dois escapes \u. A codificação UTF-8 é relevante porque determina o comprimento em bytes: um caractere BMP como '中' (U+4E2D) é codificado como 3 bytes UTF-8 (E4 B8 AD), enquanto um emoji como '😀' (U+1F600) requer 4 bytes (F0 9F 98 80). O contador de caracteres da ferramenta distingue entre contagem de code points e contagem de unidades de código UTF-16 — uma distinção útil ao depurar limites de comprimento em bancos de dados, APIs ou campos de formulário que contam unidades de código em vez de caracteres.

  • Iteração por code point: String.prototype.codePointAt(pos) retorna corretamente o code point completo para caracteres suplementares, diferentemente de charCodeAt() que retorna apenas o substituto alto — a ferramenta usa o operador spread [...str] para iterar por code point, que internamente chama o protocolo iterador de string.
  • Cálculo de par substituto: Para um code point suplementar CP > 0xFFFF, o substituto alto é Math.floor((CP - 0x10000) / 0x400) + 0xD800 e o substituto baixo é ((CP - 0x10000) % 0x400) + 0xDC00 — o modo de codificação aplica essa fórmula para produzir pares \uD800\uDC00 válidos.
  • Pipeline de regex de decodificação: Três padrões são executados sequencialmente — \u{XXXXX} (chaves ES6) → \uXXXX (hexadecimal de quatro dígitos) → U+XXXX (notação padrão) — com fromCodePoint() tratando os caminhos de chaves e U+ e fromCharCode() tratando o caminho tradicional de quatro dígitos.
  • Estrutura de bytes UTF-8: Caracteres BMP usam 1–3 bytes UTF-8 (ASCII = 1 byte, suplemento latino = 2 bytes, CJK = 3 bytes); caracteres suplementares usam 4 bytes seguindo o padrão 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx — o contador de bytes da ferramenta usa new Blob([str]).size para medição precisa.
  • Code point vs unidade de código: Um único caractere visível pode ocupar múltiplos code points (ex.: é pode ser U+00E9 ou U+0065 + U+0301 com acento agudo combinante) — a ferramenta reporta tanto charCount (unidades de código UTF-16) quanto codepointCount (valores escalares Unicode) para revelar essa discrepância.
  • Visão geral dos planos Unicode: Plano 0 (BMP) = escritas modernas, Plano 1 (SMP) = histórico + emoji + matemática, Plano 2 (SIP) = CJK raro, Plano 14 (SSP) = tags + seletores de variação, Planos 15–16 = uso privado — o modo de codificação trata corretamente todos os planos via codePointAt().
  • Notação \u vs U+: \uXXXX é a sequência de escape de JavaScript/Java/C (apenas BMP sem chaves); U+XXXX é a notação canônica do Consórcio Unicode (mínimo 4 dígitos hexadecimais, sem limite superior) — o alternador de formato da ferramenta alterna entre essas representações.

Exemplos

Chinês para escape Unicode

Entrada: 你好世界 (4 caracteres CJK, 12 bytes UTF-8)
Saída:   \u4f60\u597d\u4e16\u754c
Nota:    apenas code points BMP; útil em strings JSON, literais JavaScript e arquivos de log

Emoji para escape com par substituto

Entrada: 😀🎉 (2 emojis, cada um acima de U+FFFF)
Saída:   \uD83D\uDE00\uD83C\uDF89
Nota:    caracteres fora do BMP são codificados como par substituto UTF-16; engines JS antigas precisam de String.fromCodePoint para reverter

Decodificando escapes Unicode

Entrada: \u4e2d\u6587\u6d4b\u8bd5
Saída:   中文测试
Nota:    cole a string com escapes e a ferramenta reverte a codificação; verifique se os bytes de saída batem com a origem ao depurar problemas com payloads CJK

Perguntas frequentes

O que esta ferramenta mostra para cada caractere?

Code point (decimal e hexadecimal), nome do bloco (por exemplo, Basic Latin, CJK Unified Ideographs), categoria (Letra, Número, Símbolo, Pontuação, etc.), nome Unicode, além das representações em bytes UTF-8 / UTF-16 / UTF-32. Útil para depurar bugs de codificação e para escolher o caractere certo.

Qual a diferença entre UTF-8, UTF-16 e UTF-32?

Os três codificam os mesmos caracteres Unicode. UTF-8 usa de 1 a 4 bytes por code point e é compatível byte a byte com ASCII (a codificação dominante na web). UTF-16 usa 2 ou 4 bytes (usado internamente por JavaScript e Windows). UTF-32 usa sempre 4 bytes (raramente vista no tráfego, comum em memória).

Por que '𝓗' aparece como duas unidades de código UTF-16?

Code points acima de U+FFFF (o Plano Multilíngue Básico) são codificados como um 'par substituto' em UTF-16: duas metades de 16 bits. O string.length do JavaScript conta isso como 2; new Array.from(str) trata como um. A página mostra ambas as visões para você depurar surpresas na contagem de tamanho.

O que é uma forma de normalização (NFC/NFD/NFKC/NFKD)?

Unicode permite múltiplas representações do mesmo texto visível — é pode ser um único code point (U+00E9) ou e + acento agudo combinante (U+0065 U+0301). NFC compõe; NFD decompõe. NFKC/NFKD adicionalmente unificam caracteres de compatibilidade (½ → 1/2). Sempre normalize antes de comparar strings ou gerar hash.

Por que emojis às vezes aparecem como quadradinhos?

A fonte do seu navegador não tem aquele glifo. Emojis modernos usam sequências ZWJ (por exemplo, 👨‍👩‍👧 = homem + ZWJ + mulher + ZWJ + menina) que precisam de fontes específicas para renderizar como uma única imagem; fontes mais antigas mostram três emojis separados ou quadradinhos.

Como busco um caractere pelo nome?

Digite o nome (ou parte dele) na caixa de busca. Os nomes seguem a lista oficial de nomes Unicode (LATIN SMALL LETTER A, GREEK CAPITAL LETTER OMEGA, MUSICAL SYMBOL G CLEF). Emojis comuns também têm um 'nome curto CLDR' que a página reconhece.

Minha entrada é enviada para algum lugar?

Não. As consultas usam uma base de dados Unicode no navegador. Nada é enviado.