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

为何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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 07:55:40