首页 > 解决方案 > 如何使用节点控制台原始值?

问题描述

当我尝试打印一个特殊的字符串时,我得到了混乱的代码:

const str = "\xa7\xe6\xd9\xe6\x95\xe6\xe4\xb0\x82L\x13"
console.log(str) // §æÙææä°L
// expect: the origin value, "\xa7\xe6\xd9\xe6\x95\xe6\xe4\xb0\x82L\x13".

看来终端会自动使用 utf8 对字符串进行编码。

我如何打印或获取原始输入:"\xa7\xe6\xd9\xe6\x95\xe6\xe4\xb0\x82L\x13"当我使用节点时?

标签: node.jsconsolespecial-characters

解决方案


请参阅https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/raw

const str = String.raw`\xa7\xe6\xd9\xe6\x95\xe6\xe4\xb0\x82L\x13`;
console.log(str); // \xa7\xe6\xd9\xe6\x95\xe6\xe4\xb0\x82L\x13

如果您要打印出一个字符串变量,Javascript(为了简洁起见,我将仅使用您的第一个“字符”来说明)将永远不会打印出像\xa7字符的视觉再现那样的东西。§这是因为代码值为 0xA7 的字符(请参见下面的倒数第二段)以与大多数输出​​设备兼容的明确定义的字形完美打印出来(与\x07BEL 之类的设备不同)。

请注意,字符串文字(例如"\xa7")不是一个字节或一个字节。JS 字符串以UTF-16编码,因此每个字符要么是 2 个字节,要么是 4 个字节(对于那些需要代理的字符)。JS 字符串中代码点值等于 0xA7 ( SECTION SIGN U+00A7 ) 的字符具有符号\u{00a7}(而不是\xa7),在打印时会呈现§

如果你给一个变量赋一个字面值\xa7,我认为JS把它当作两个字节:0x00和0xA7(顺序取决于字节序),从而形成代码点U+00A7的UTF-16编码。

为了正确理解和回答您的问题,您应该对您提出的“特殊字符串”的起源做出一些澄清。


推荐阅读