JavaScript emoji长度之谜:UTF-8, UTF-16, UTF-32与扩展字素群集

2025-08-22

本文探讨了不同编程语言中emoji字符串长度的差异,例如JavaScript中“🤦🏼‍♂️”.length为7,Python中为5,Rust中为17。这源于不同语言对字符串编码(UTF-16、UTF-8等)和字素单位(Unicode标量值、扩展字素群集等)的处理方式不同。作者认为,记住字符串在原生编码中的长度是合理的,但对于其他长度(如扩展字素群集),则应按需计算,避免不必要的存储开销和同步问题。文章还分析了不同编码方式的优缺点,并指出UTF-8在存储和交换方面的优势,最后讨论了公平的长度配额问题,指出没有简单的方法能公平地衡量不同语言的信息密度,并以联合国人权宣言的翻译为例进行说明。