Node.js 源代码需要啥编码?
Posted
技术标签:
【中文标题】Node.js 源代码需要啥编码?【英文标题】:What encoding is expected for Node.js source code?Node.js 源代码需要什么编码? 【发布时间】:2012-04-24 21:23:47 【问题描述】:我已经进行了一些 Google 搜索,但我得到了与编码字符串或文件相关的结果。
我可以编写 UTF-8 格式的 Node.js javascript 源代码吗?我可以在 cmets、字符串或变量名中使用非 ASCII 字符吗?
ECMA-262 似乎是 require UTF-16 encoding,但 Node.js 不会运行 UTF-16 编码的 .js
文件。但是,它将运行 UTF-8 源代码并正确解释非 ASCII 字符。
这是设计使然还是“意外”?是否在某处指定了支持 UTF-8 源代码?
【问题讨论】:
虽然我从来没有考虑过这一点,但我一直使用 UTF-8 处理我所做的一切,从来没有遇到过问题。 我希望它不是 Node.js 的东西,而是 V8 的东西。 我希望有人可以指出,比如 Node.js 或 V8 文档,说明允许使用哪些源编码。 (Python 示例:python.org/dev/peps/pep-0263)。是的,我可以并且确实做了一些事情,看看什么有效,但我想要一个更具体的答案。 您正在链接到一个非常旧版本的规范(第 3 版是从 1999 年开始的,我们刚刚在去年 6 月达到第 6 版)。当前版本是here。要求是“unicode”(按照惯例,ASCII 是 unicode 的子集,因为 unicode 中较低的 127 个代码点与 ASCII 编码指定的相同) 嗨@Nate,从你问这个问题开始似乎已经过去了几年。我正在寻找类似您在评论中写的 Python 示例的内容。这段时间你找到具体答案了吗? 【参考方案1】:参考:http://mathiasbynens.be/notes/javascript-identifiers
UTF-8 字符是有效的 JavaScript 变量名。继续编码 UTF-8。
【讨论】:
Unicode 字符和 UTF-8 编码是不同的东西。该标准实际上似乎需要 UTF-16,而不是 UTF-8(但在实践中似乎并非如此)。很高兴确认 Unicode 字符是有效的变量名。 虽然可用,但我不建议您这样做var Hͫ̆̒̐ͣ̊̄ͯ͗͏̵̗̻̰̠̬͝ͅE̴̷̬͎̱̘͇͍̾ͦ͊͒͊̓̓̐_̫̠̱̩̭̤͈̑̎̋ͮͩ̒͑̾͋͘Ç̳͕̯̭̱̲̣̠̜͋̍O̴̦̗̯̹̼ͭ̐ͨ̊̈͘͠M̶̝̠̭̭̤̻͓͑̓̊ͣͤ̎͟͠E̢̞̮̹͍̞̳̣ͣͪ͐̈T̡̯̳̭̜̠͕͌̈́̽̿ͤ̿̅̑Ḧ̱̱̺̰̳̹̘̰́̏ͪ̂̽͂̀͠ = 'Zalgo';
标准说 JavaScript 的原生文本处理模型是基于 UTF-16 代码单元的。这并没有指定使用什么字节编码将源文件转换为这些单位。【参考方案2】:
我找不到说明 Node 将文件视为 UTF-8 编码的文档,但在实验上似乎是这样:
/* Check in your editor that this Javascript file was saved in UTF-8 */
var nonEscaped = "Планета_Зямля";
var escaped = "\u041f\u043b\u0430\u043d\u0435\u0442\u0430\u005f\u0417\u044f\u043c\u043b\u044f";
if (nonEscaped === escaped)
console.log("They match");
上面的例子打印They match
。
非 BMP 注释:
请注意,UTF-8 支持非 BMP 代码点(U+10000 及以上),但 Javascript 在这种情况下会出现复杂情况,它会自动将它们转换为代理对。这是语言的一部分:
/* Check in your editor that this Javascript file was saved in UTF-8 */
var nonEscaped = "?"; // U+1F4A9
var escaped1 = "\ud83d\udca9";
if (nonEscaped === escaped1)
console.log("They match");
/* Newer implementations support this syntax: */
var escaped2 = "\u1f4a9";
if (nonEscaped === escaped2)
console.log("The second string matches");
这会打印出They match
和The second string matches
。
【讨论】:
以上是关于Node.js 源代码需要啥编码?的主要内容,如果未能解决你的问题,请参考以下文章
vscode已经按正常程序安装,可是不论运行啥js代码就输出这些玩意如下图,运行html正常,求教,急!
从javascript获取和从node.js获取节点,有啥区别[关闭]