O Caso Curioso do Comprimento de Emojis em JavaScript: UTF-8, UTF-16, UTF-32 e Clusters de Grafemas

2025-08-22

Este artigo aprofunda as discrepâncias no comprimento de strings de emojis em diferentes linguagens de programação. Por exemplo, em JavaScript "🤦🏼‍♂️".length é 7, enquanto em Python é 5 e em Rust, 17. Isso decorre de variações em como as linguagens manipulam a codificação de strings (UTF-16, UTF-8, etc.) e unidades de caracteres (valores escalares Unicode, clusters de grafemas estendidos, etc.). O autor argumenta que memorizar o comprimento na codificação nativa é razoável, mas outros comprimentos (como clusters de grafemas estendidos) devem ser calculados sob demanda para evitar sobrecarga de armazenamento desnecessária e problemas de sincronização. O artigo analisa ainda os prós e contras de diferentes esquemas de codificação, destacando as vantagens do UTF-8 em armazenamento e intercâmbio. Finalmente, aborda a questão de cotas de comprimento justas, demonstrando que não há uma maneira simples de medir de forma justa a densidade de informação em diferentes idiomas, ilustrando isso com traduções da Declaração Universal dos Direitos Humanos.

Desenvolvimento Codificação de Strings