我已经进行了一些谷歌搜索,但是得到的结果都与编码字符串或文件有关。
我可以在UTF-8中编写我的Node.js JavaScript源代码吗?我可以在注释、字符串或变量名中使用非ASCII字符吗?
ECMA-262似乎需要UTF-16编码, 但是Node.js不会运行UTF-16编码的.js
文件。但它可以运行UTF-8源代码并正确解释非ASCII字符。
那么这是设计上还是“意外”导致的?是否有规定支持UTF-8源代码?
我已经进行了一些谷歌搜索,但是得到的结果都与编码字符串或文件有关。
我可以在UTF-8中编写我的Node.js JavaScript源代码吗?我可以在注释、字符串或变量名中使用非ASCII字符吗?
ECMA-262似乎需要UTF-16编码, 但是Node.js不会运行UTF-16编码的.js
文件。但它可以运行UTF-8源代码并正确解释非ASCII字符。
那么这是设计上还是“意外”导致的?是否有规定支持UTF-8源代码?
参考:http://mathiasbynens.be/notes/javascript-identifiers
UTF-8字符是有效的JavaScript变量名。请放心使用UTF-8编码。
var Hͫ̆̒̐ͣ̊̄ͯ͗͏̵̗̻̰̠̬͝ͅE̴̷̬͎̱̘͇͍̾ͦ͊͒͊̓̓̐_̫̠̱̩̭̤͈̑̎̋ͮͩ̒͑̾͋͘Ç̳͕̯̭̱̲̣̠̜͋̍O̴̦̗̯̹̼ͭ̐ͨ̊̈͘͠M̶̝̠̭̭̤̻͓͑̓̊ͣͤ̎͟͠E̢̞̮̹͍̞̳̣ͣͪ͐̈T̡̯̳̭̜̠͕͌̈́̽̿ͤ̿̅̑Ḧ̱̱̺̰̳̹̘̰́̏ͪ̂̽͂̀͠ = 'Zalgo';
。 - undefined我找不到文件说明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
。
请注意,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 = "\u{1f4a9}";
if (nonEscaped === escaped2) {
console.log("The second string matches");
}
这将打印出They match
和The second string matches
。