node.js - 如何使用节点控制台原始值?
问题描述
当我尝试打印一个特殊的字符串时,我得到了混乱的代码:
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"
当我使用节点时?
解决方案
请参阅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 的字符(请参见下面的倒数第二段)以与大多数输出设备兼容的明确定义的字形完美打印出来(与\x07
BEL 之类的设备不同)。
请注意,字符串文字(例如"\xa7"
)不是一个字节或一个字节。JS 字符串以UTF-16编码,因此每个字符要么是 2 个字节,要么是 4 个字节(对于那些需要代理的字符)。JS 字符串中代码点值等于 0xA7 ( SECTION SIGN U+00A7 ) 的字符具有符号\u{00a7}
(而不是\xa7
),在打印时会呈现§
。
如果你给一个变量赋一个字面值\xa7
,我认为JS把它当作两个字节:0x00和0xA7(顺序取决于字节序),从而形成代码点U+00A7的UTF-16编码。
为了正确理解和回答您的问题,您应该对您提出的“特殊字符串”的起源做出一些澄清。
推荐阅读
- android - 从 api 递归获取数据
- java - 如何将代码构建到一个 jar 中,并将所有 maven 依赖项构建到 pom.xml 中的另一个 jar 中
- python - 更新 scikit-learn
- nlp - 如何在内置 spacy 模型“en_core_web_lg”中添加自定义公司作为 ORG 实体?
- r - 无法在点和点密度上映射多边形
- assembly - 如果我有 BIOS 参数块,为什么我的引导加载程序代码可以在除我的笔记本电脑之外的任何地方工作?
- firebase - React Native Firebase 根据其他用户的操作实时更新所有用户的信息
- docker - teamcity 在哪个 IP 上运行我的 docker 映像
- php - 需要一个正则表达式来动态捕获精确的 uri 字符串
- swift - 'NSKeyedUnarchiveFromData' 不应用于取消归档,并将在未来版本中删除