let font= "\U65b9\U6b63\U5c0f";
let rightFont = "\u65b9\u6b63\u5c0f"
console.log("rightStr = ",rightFont);
// rightStr = 方正小
const formateStr= font.replace(/\U/g,"\\u");
console.log("formateStr = ",formateStr);
// formateStr = \u65b9\u6b63\u5c0f
问题
为什么我已经把U换成u了,还是无法显示中文?
探索
发现二者编码不一样
console.log(encodeURI(rightFont,"utf-8")); //%E6%96%B9%E6%AD%A3%E5%B0%8F
console.log(encodeURI(formateStr,"utf-8")); //%5Cu65b9%5Cu6b63%5Cu5c0f
这个问题只在mac端存在,我的dev环境是在electron读取系统的字体,改问题可能是Mac跨平台兼容字体的问题
Mac 用户在处理 Windows 下编辑的文档时,会遇到字体的兼容性问题,常见字体如仿宋GB_2312、方正小标宋、楷体_GB2312等,如果不安装经过特殊处理的字体,将无法正常识别。
https://github.com/guorenxi/M...
不清楚此类问题能否从技术角度来解决,而不是如上链接中所说的,需要用户重装对应字体...
\
是转义符, 所以当你这样\U
定义字面量的时候,js引擎在解析代码的时候已经丢掉了\
当然不可能有正确的结果。什么场景需要定义一个这样的字符串字面量呢,如果一定要这么搞,可以像这样:
=====补充========
如果你的字符串不是字面量,而是某个地方读出来的,自带了
\
字符,那么同样的道理: