You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter截取含Emoji的字符串时渲染失败,如何可靠截取?

如何在Dart中可靠截取含Emoji的字符串

你的问题出在Dart原生的String.length和substring方法是基于UTF-16代码单元计算的,而很多Emoji(比如😀、👨‍👩‍👧这类组合表情)由多个UTF-16代码单元或Unicode代码点组成,直接按固定位置截取会截断这些多单元字符,导致渲染出乱码�。

可靠解决方案:使用dart:characters处理 grapheme clusters

Dart的dart:characters库专门处理用户感知的单个字符(即grapheme clusters),包括完整的Emoji(无论其内部由多少个代码点组成)。用它来截取字符串能保证不会拆分任何一个可见字符。

  1. 首先导入库:
import 'dart:characters';
  1. 修改截取逻辑:
const maxDisplayLength = 40;
if (useStr.characters.length > maxDisplayLength) {
  useStr = useStr.characters.take(maxDisplayLength).toString() + "...";
}

原理说明

  • useStr.characters会将字符串拆分为用户可见的独立字符单元,每个Emoji(包括组合式Emoji)都被视为一个完整单元。
  • take(maxDisplayLength)会提取前40个完整的字符单元,不会截断任何一个Emoji,从根本上避免了乱码问题。

内容的提问来源于stack exchange,提问作者Amaryllis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 20:55:20