0

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

我有这样的代码和平:

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 服务器上运行它时,它会返回这个“异常”结果:

content is: \u0430\u0437\u0443\u0439

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

string азуй

那么,这实际上怎么可能?

1) 相同的内容

2)相同的变量类型

3)同样的(decodeURIComponent)函数

  • 但结果不同???

PS我看到的唯一区别是起源contentstring变量。但这是发挥作用吗?

4

1 回答 1

0

您创建的第二个字符串不是包含反斜杠的字符串。相反,它是一串 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);
于 2016-05-16T19:48:35.640 回答