decodeURIComponent 是同时工作还是不同时工作?

decodeURIComponent is both working and not working simultaneously?

我无法理解,但这是我的情况。

我有这个安宁的代码:

someFunction: function(content){

    content    = content.substr(19005,24);

    console.log('content is: '+content);

    content    = decodeURIComponent(content);

    console.log(typeof content, content);

    var string = '\u0430\u0437\u0443\u0439';

    string     = decodeURIComponent(string);

    console.log(typeof string, string);
}

当我在我的 node.js 服务器上 运行 它 returns 这个 "abnormal" 结果:

content is: \u0430\u0437\u0443\u0439

string \u0430\u0437\u0443\u0439 // but should be "string азуй" as below

string азуй

那么,怎么可能呢??

1) 内容相同

2) 变量类型相同

3)相同的(decodeURIComponent)函数

P.S。我看到的唯一区别是 contentstring 变量的来源。但是这个有作用吗?

您创建的第二个字符串不是包含反斜杠的字符串。相反,它是一串 unicode 字符。在 javascript 中创建字符串时,您可以使用反斜杠转义并给出一个 unicode 字符编号。这允许在正常可键入键之外的特殊字符。 (不完全准确,但你明白了)。

要使其正常工作,您需要执行以下操作:

var string = '\u0430\u0437\u0443\u0439';

这种双重转义意味着您实际上使用的是反斜杠而不是转义序列。

有关详细信息,请参阅 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Lexical_grammar#String_literals

编辑:听起来你在问如何从第一个字符串转到实际的 unicode 字符。使用这个(答案取自 How do I decode a string with escaped unicode?):

var content = content.substr(19005,24);
var r = /\u([\d\w]{4})/gi;
content = content.replace(r, function (match, grp) {
    return String.fromCharCode(parseInt(grp, 16)); } );
content = unescape(content);