如何使用JavaScript将Cambria Math字体格式文本转换为纯文本
问题解答
可以通过JavaScript实现这类特殊文本到普通纯文本的转换。
你遇到的保留Cambria Math字体格式的「𝐓𝐁𝐋」本质不是带字体格式的文本,而是属于Unicode「数学字母数字符号」区块的特殊编码字符,记事本无法正常显示是因为默认字体不支持该字符区块,Word中能正常显示是因为自带Cambria Math字体对该区块做了适配,和文本本身带格式没有关系。
实现原理
- 这类数学风格的英文字母和普通ASCII英文字母存在固定的码位对应关系:你示例中的三个加粗无衬线大写字母,码点范围在
U+1D400-U+1D419区间,依次对应普通大写A-Z,码点偏移量固定,不需要依赖字体识别就能完成转换。
可直接运行的转换代码
/** * 将Cambria Math显示的数学加粗大写字母转换为普通纯文本 * @param {string} input 输入的特殊格式文本 * @returns {string} 转换后的普通纯文本 */ function convertMathBoldTextToPlain(input) { return input.replace(/\uD835[\uDC00-\uDD38]/g, (matchChar) => { const charCode = matchChar.codePointAt(0); const capitalAOffset = charCode - 0x1D400; // 匹配大写A-Z区间,返回对应普通ASCII字符 if (capitalAOffset >= 0 && capitalAOffset <= 25) { return String.fromCharCode(65 + capitalAOffset); } // 小写字母、斜体、双线体等其他数学字符可按相同逻辑扩展映射规则 return matchChar; }); } // 测试:转换𝐓𝐁𝐋 console.log(convertMathBoldTextToPlain('𝐓𝐁𝐋')); // 输出结果:TBL
注意事项
- 上述代码已经覆盖你示例中的加粗大写字母场景,如果你的文本包含斜体、空心体、手写体等其他Cambria Math适配的数学字符,只需要对应补充对应Unicode区块的偏移映射规则,即可实现全类型数学特殊字符的转换。
- 转换后的字符是标准ASCII纯文本,不需要依赖任何特殊字体,在记事本、任意文本编辑器中都能正常显示,不存在格式残留问题。
内容的提问来源于stack exchange,提问作者Vladislav moroz
相关产品推荐
相关产品推荐

