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
相关产品推荐
相关产品推荐

