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

如何在Dart/Flutter中将花式Unicode文本转换为常规文本?

在Dart/Flutter中转换花式Unicode文本为常规文本

要将各类花式Unicode文本转换为常规文本,核心思路是把不同风格的字符变体映射回对应的基础ASCII字符,结合Unicode规范化处理。以下是一个直接可行的实现方案:

自定义映射转换函数

通过建立花式字符到常规字符的映射表,遍历输入字符串进行替换,最后做Unicode规范化处理:

String convertFancyToNormal(String input) {
  // 映射各类常见花式字符到常规字符,可根据需求扩展
  final charMap = <String, String>{
    // 数学斜体
    '𝑻': 'T', '𝒉': 'h', '𝒆': 'e', '𝒒': 'q', '𝒖': 'u', '𝒊': 'i', '𝒄': 'c', '𝒌': 'k',
    '𝒃': 'b', '𝒓': 'r', '𝒐': 'o', '𝒘': 'w', '𝒏': 'n', '𝒇': 'f', '𝒙': 'x', '𝒋': 'j',
    '𝒎': 'm', '𝒑': 'p', '𝒍': 'l', '𝒛': 'z', '𝒚': 'y', '𝒅': 'd', '𝒈': 'g',
    // 粗体变体
    '𝗧': 'T', '𝗵': 'h', '𝗲': 'e', '𝗤': 'Q', '𝗨': 'U', '𝗜': 'I', '𝗖': 'C', '𝗞': 'K',
    '𝗕': 'B', '𝗥': 'R', '𝗢': 'O', '𝗪': 'W', '𝗡': 'N', '𝗙': 'F', '𝗫': 'X', '𝗝': 'J',
    '𝗠': 'M', '𝗣': 'P', '𝗘': 'E', '𝗗': 'D', '𝗟': 'L', '𝗔': 'A', '𝗭': 'Z',
    '𝗬': 'Y', '𝗗': 'D', '𝗢': 'O', '𝗚': 'G',
    // 等宽粗体
    'B': 'B', 'r': 'r', 'o': 'o', 'w': 'w', 'n': 'n',
    // 手写/哥特体
    '𝔗': 'T', '𝔥': 'h', '𝔢': 'e', '𝔔': 'Q', '𝔲': 'u', '𝔦': 'i', '𝔠': 'c', '𝔨': 'k',
    '𝔅': 'B', '𝔯': 'r', '𝔬': 'o', '𝔴': 'w', '𝔫': 'n', '𝔉': 'F', '𝔬': 'o', '𝔵': 'x',
    '𝔍': 'J', '𝔪': 'm', '𝔭': 'p', '𝔡': 'd', '𝔏': 'L', '𝔞': 'a', '𝔷': 'z',
    '𝔶': 'y', '𝔇': 'D', '𝔤': 'g',
    // 圈形字符
    '🅵': 'F', '🅾': 'O', '🆇': 'X', 'ⓞ': 'o', 'ⓥ': 'v', 'ⓔ': 'e', 'ⓡ': 'r',
    // 反向字符
    'ʇ': 't', 'ɥ': 'h', 'ǝ': 'e',
  };

  String result = '';
  for (final char in input.characters) {
    result += charMap[char] ?? char;
  }

  // 处理Unicode组合字符,确保文本完全规范化
  return result.normalize(NFC);
}

使用示例

void main() {
  final fancyText = '𝑻𝒉𝒆 ℚ𝕦𝕚𝕔𝕜 Brown 🅵🅾🆇 𝔍𝔲𝔪𝔭𝔢𝔡 ⓞⓥⓔⓡ ʇɥǝ 𝗟𝗮𝘇𝘆 𝙳𝚘𝚐';
  final normalText = convertFancyToNormal(fancyText);
  print(normalText); // 输出: The Quick Brown Fox Jumped over the Lazy Dog
}

扩展说明

  • 若需要处理更多罕见的花式字符变体,可以继续扩展charMap的映射条目。
  • 对于更复杂的Unicode字符(如带修饰符的组合字符),normalize(NFC)可以将其合并为标准形式,避免残留异常字符。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 12:54:54