Flutter Text组件无法识别部分字符显示问号的解决方法
Flutter Text组件显示异常(问号替代未知字符)的解决方法
效果对比
- 期望效果:

- 错误效果:

核心解决步骤
1. 引入支持目标字符的字体
大部分默认字体(如Roboto)对生僻字、特殊符号或小众语言字符支持不足,这是最常见的原因:
- 下载覆盖目标字符的字体(推荐Google的Noto系列,支持多语言及特殊字符)
- 在项目根目录创建
fonts文件夹,放入字体文件 - 在
pubspec.yaml中配置字体:flutter: fonts: - family: NotoSans fonts: - asset: fonts/NotoSansSC-Regular.ttf - 在Text组件中指定该字体:
Text( "需要显示的特殊文本", style: TextStyle(fontFamily: "NotoSans"), )
2. 确保文本编码为UTF-8
若文本来自网络或本地文件,编码错误会导致字符解析失败:
- 读取文件时明确指定UTF-8编码:
String content = await rootBundle.loadString('assets/target_text.txt', encoding: Encoding.getByName('utf-8')); - 网络请求时,确保响应头指定
Content-Type: text/plain; charset=utf-8,或手动转码为UTF-8字符串。
3. 配置字体 fallback 列表
如果不想完全替换默认字体,可设置 fallback 字体列表,让Flutter在默认字体不支持时自动切换:
Text( "需要显示的特殊文本", style: TextStyle( fontFamilyFallback: ["NotoSans", "PingFang SC"], // 按优先级排列 ), )
4. 验证字符有效性
确认要显示的字符是标准Unicode收录的有效字符,避免使用未被认可的私有区域字符或无效编码字符。
内容的提问来源于stack exchange,提问作者An Tran
相关产品推荐
相关产品推荐

