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

JavaScript中如何将含UTF8和UTF16字符的混合字符串转为UTF8字符串

问题本质澄清

你遇到的是**同形异义字符(Homoglyph)**替换场景,示例里的а(Unicode码点1072,西里尔小写字母a)、е(Unicode码点1077,西里尔小写字母e)和拉丁字母a、e只是字形相似,本质是完全不同的Unicode字符,不属于同一字符的不同编码格式,因此无法直接通过编码转换实现替换,需要做自定义字符映射处理。

实现方案

方案1:手动维护映射表(推荐,适合已知待替换字符的场景)

提前梳理业务中会遇到的同形字符和目标拉丁字符的映射关系,遍历字符串逐字符匹配替换即可,性能最高:

// 同形字符映射表,可根据业务需求补充更多规则
const homoglyphMap = {
  1072: 'a', // 西里尔小写а
  1077: 'e', // 西里尔小写е
  1086: 'o', // 西里尔小写о
  1088: 'p', // 西里尔小写р
  1089: 'c', // 西里尔小写с
  1091: 'y', // 西里尔小写у
  1093: 'x', // 西里尔小写х
}

function convertHomoglyphToLatin(str) {
  return Array.from(str).map(char => {
    const charCode = char.charCodeAt(0)
    return homoglyphMap[charCode] ?? char
  }).join('')
}

测试验证

const mixedString = "Dаtе";
const expectedString = "Date";

console.log(convertHomoglyphToLatin(mixedString) === expectedString) // 输出 true

方案2:全量同形字符处理

如果需要覆盖所有已知的同形字符,可以引入成熟的同形字符处理库,内置了完整的Unicode同形字符映射表,不需要手动维护规则。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 20:36:03