如何让Python3计算emoji长度的结果与JavaScript保持一致
字符长度计算差异的核心原因
Python内置len()方法统计的是字符串包含的Unicode码点总数,而JavaScript的length属性统计的是字符串UTF-16编码的16位单元总数。
绝大多数emoji属于Unicode补充平面字符,单个emoji码点需要占用2个UTF-16编码单元;带肤色、表情组合符的多码点emoji,每个码点都对应2个UTF-16单元,因此会出现你遇到的长度计算差异。
Python对齐JS计算逻辑的实现方法
无需引入第三方依赖,直接通过原生编码转换即可实现完全对齐JS的长度统计,代码如下:
def get_js_aligned_length(input_str: str) -> int: # 采用UTF-16小端编码,避免BOM头干扰统计结果 return len(input_str.encode('utf-16-le')) // 2
效果验证
- 输入字符串
'👀':调用方法返回值为2,与JS计算结果一致 - 输入字符串
'👍🏾':调用方法返回值为4,与JS计算结果一致
内容的提问来源于stack exchange,提问作者Jean DuPont
相关产品推荐
相关产品推荐

