为何fs.readFileSync读取文件时Unicode转义序列未转换?
为什么Node.js读取文件时Unicode转义序列不会自动转换?
核心原因:两种场景的处理逻辑完全不同
- 模板字符串的转义是JS语法解析的一部分:当你把内容复制到代码的模板字符串里时,Node.js在解析代码的阶段,会把
\uXXXX这类转义序列当作JavaScript的语法规则处理,自动转换成对应的Unicode字符——这是JS引擎编译代码时的默认行为。 - 读取文件得到的是原始文本:
fs.readFileSync的作用只是把文件里的字节按utf8编码解码成字符串,它不会对字符串内容做JS语法层面的解析。文件里的\uXXXX就是普通的字符组合(反斜杠、u、四个十六进制数),自然不会被转换成对应字符。
手动解析转义序列的方法
如果需要将读取到的字符串中的Unicode转义序列转为对应字符,可以用正则替换实现:
const fs = require('fs'); const rawText = fs.readFileSync('target-file.txt', 'utf8'); const processedText = rawText.replace(/\\u([0-9a-fA-F]{4})/g, (match, code) => { return String.fromCodePoint(parseInt(code, 16)); }); console.log(processedText);
如果完全信任文件内容的安全性,也可以用eval快速处理(注意:不可用于不可信内容):
const processedText = eval(`"${rawText.replace(/"/g, '\\"')}"`);
内容的提问来源于stack exchange,提问作者Denes
相关产品推荐
相关产品推荐

