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

如何在Dart/Flutter中将带重音的UTF-8字符串转为ASCII?

在Dart中去除字符串重音字符的方法

Dart标准库没有直接提供去除重音的API,但可以通过以下两种方式实现需求:

1. 使用unorm_dart包(推荐,支持全范围Unicode字符)

这个包提供Unicode规范化功能,能将带重音的字符分解为基础字符+重音标记,再过滤掉重音部分即可。

  • 第一步:在pubspec.yaml中添加依赖:
    dependencies:
      unorm_dart: ^0.2.0
    
  • 第二步:编写代码实现转换:
    import 'package:unorm_dart/unorm_dart.dart';
    
    void main() {
      String data = 'árvíztűrő tükörfúrógép';
      // NFKD规范化后过滤非ASCII字符(重音标记属于非ASCII)
      String result = nfkd(data).replaceAll(RegExp(r'[^\u0000-\u007F]'), '');
      print(result); // 输出: arvizturo tukorfurogep
    }
    

2. 手动字符映射(适合简单场景)

如果只需要处理特定语言的重音字符,可以手动创建映射表替换:

void main() {
  String data = 'árvíztűrő tükörfúrógép';
  final accentMap = {
    'á': 'a', 'é': 'e', 'í': 'i', 'ó': 'o', 'ú': 'u',
    'ű': 'u', 'ő': 'o'
  };
  String result = data.split('').map((char) => accentMap[char] ?? char).join();
  print(result); // 输出: arvizturo tukorfurogep
}

这种方式的局限是需要手动维护映射表,无法覆盖所有Unicode重音字符。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 14:35:22