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

Node.js中输出原始值及获取特殊转义字符串原始输入的方法咨询

嘿,我来帮你搞定这两个Node.js里的字符串输出问题~

1. 如何使用Node.js输出原始值?

这里说的“原始值”应该是指保留字符串里的转义字符,不让它们被解析成实际字符对吧?有几个实用的方法:

  • 用JSON.stringify()快速实现:这个方法会自动把字符串中的特殊字符转换成标准的转义格式,适合大多数场景:
    const str = "Hello\nWorld";
    console.log(JSON.stringify(str)); // 输出:"Hello\nWorld"
    
  • 用ES6的String.raw定义原始字符串:如果是在定义字符串的时候就想直接保留转义符不解析,直接用这个模板字符串语法:
    const rawStr = String.raw`Hello\nWorld`;
    console.log(rawStr); // 输出:Hello\nWorld
    
  • 手动转义(不推荐):如果需要自定义转义规则,可以遍历每个字符手动转换,但这种方法太繁琐,一般没必要用。
2. 解决特殊字符串打印乱码,获取原始转义内容

你遇到的乱码问题,本质是终端把字符串里的字节当成UTF-8字符解析了,但你想要的是还原成当初输入的\xXX格式转义序列。这里给你两个好用的解决方案:

方案1:自定义函数生成原始转义字符串

遍历字符串的每个字符,把非可打印ASCII字符转换成\xXX格式,可打印字符直接保留:

const str = "\xa7\xe6\xd9\xe6\x95\xe6\xe4\xb0\x82L\x13";

function getRawEscapeStr(str) {
  let rawStr = '';
  for (const char of str) {
    const charCode = char.charCodeAt(0);
    // 可打印ASCII范围(32-126)直接保留,否则转成\xXX
    if (charCode >= 32 && charCode <= 126) {
      rawStr += char;
    } else {
      // 转成两位十六进制,不足补0,统一小写
      rawStr += `\\x${charCode.toString(16).padStart(2, '0')}`;
    }
  }
  return `"${rawStr}"`;
}

console.log(getRawEscapeStr(str)); 
// 输出:"\xa7\xe6\xd9\xe6\x95\xe6\xe4\xb0\x82L\x13"

方案2:用Node.js内置的util.inspect(更简洁)

Node.js的util模块自带的inspect方法可以自定义输出格式,开启escapeNonASCII选项就能自动把非ASCII字符转成转义序列:

const util = require('util');
const str = "\xa7\xe6\xd9\xe6\x95\xe6\xe4\xb0\x82L\x13";

console.log(util.inspect(str, { escapeNonASCII: true }));
// 输出:"\xa7\xe6\xd9\xe6\x95\xe6\xe4\xb0\x82L\x13"

这个方法是原生支持的,不用自己写遍历逻辑,非常方便。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 17:43:09