decodeURIComponent既可以工作又不能同时工作?

时间:2016-05-16 19:41:27

标签: node.js string decodeuricomponent

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

我有这种代码的和平:

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)函数

  • 但结果不同???

P.S。我看到的唯一区别是contentstring vars的来源。但这是否起作用?

1 个答案:

答案 0 :(得分: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);