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

Dart中如何正确解码ASCII格式数字字符编码为普通文本

问题原因

dart:convert 包提供的ASCII解码器仅支持解码码位范围0-127的标准ASCII字符,你需要处理的&#XXXX格式内容不属于ASCII编码范畴,本质是HTML十进制数字实体,&#后跟随的数字是对应字符的Unicode十进制码位,因此用ASCII解码器无法完成解码。

实现步骤
  • 预处理输入内容:先修复输入里的格式异常,比如示例中出现的& #(&和#之间多了空格)的错误,统一替换为标准的&#格式,再按规则提取所有实体单元。
  • 实体解析:提取每个实体中&#后、分号前的数字,转换为整数类型的Unicode码位值。
  • 字符转换:使用Dart内置的String.fromCharCode()方法,将每个码位直接转换为对应字符,最后拼接所有字符得到最终解码结果。
可复用实现代码
/// 解码&#XXXX;格式的HTML十进制数字实体为普通文本
String decodeNumericHtmlEntities(String rawInput) {
  // 修复&与#之间存在多余空格的格式问题
  final fixedInput = rawInput.replaceAll(RegExp(r'&\s+#'), '&#');
  // 匹配所有合法的数字实体
  final entityReg = RegExp(r'&#(\d+);');
  // 逐段替换实体为对应字符
  return fixedInput.replaceAllMapped(entityReg, (match) {
    final charCode = int.parse(match.group(1)!);
    return String.fromCharCode(charCode);
  });
}

// 测试验证
void main() {
  const testInput = "ف َ إ ِ ن ّ َ   ٱ ل ْ ج& #1614; ن ّ َ ة َ";
  final decodeResult = decodeNumericHtmlEntities(testInput);
  print(decodeResult); // 输出结果:فَإِنَّ ٱلْجَنَّة
}

提示:如果你的输入完全符合&#数字;的标准实体格式,没有多余空格、缺分号之类的问题,可以跳过预处理的替换步骤,直接执行正则匹配替换即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 11:30:54