El curioso caso de la longitud de emojis en JavaScript: UTF-8, UTF-16, UTF-32 y agrupaciones de grafemas

2025-08-22

Este artículo profundiza en las discrepancias en la longitud de las cadenas de emojis en diferentes lenguajes de programación. Por ejemplo, en JavaScript "🤦🏼‍♂️".length es 7, mientras que en Python es 5 y en Rust, 17. Esto se debe a las variaciones en cómo los lenguajes manejan la codificación de cadenas (UTF-16, UTF-8, etc.) y las unidades de caracteres (valores escalares Unicode, agrupaciones de grafemas extendidas, etc.). El autor argumenta que recordar la longitud en la codificación nativa es razonable, pero otras longitudes (como las agrupaciones de grafemas extendidas) deben calcularse a demanda para evitar una sobrecarga de almacenamiento innecesaria y problemas de sincronización. El artículo analiza además los pros y los contras de diferentes esquemas de codificación, destacando las ventajas de UTF-8 en almacenamiento e intercambio. Finalmente, aborda el tema de las cuotas de longitud justas, demostrando que no hay una manera sencilla de medir de forma justa la densidad de información en diferentes idiomas, ilustrando esto con traducciones de la Declaración Universal de los Derechos Humanos.