decodeURIComponent同时工作和不工作



我只是不明白,但这是我的情况。

我有这样的代码:

someFunction: function(content){
    content    = content.substr(19005,24);
    console.log('content is: '+content);
    content    = decodeURIComponent(content);
    console.log(typeof content, content);
    var string = 'u0430u0437u0443u0439';
    string     = decodeURIComponent(string);
    console.log(typeof string, string);
}

当我在node.js服务器上运行它时,它会返回"异常"结果:

content is: u0430u0437u0443u0439
string u0430u0437u0443u0439 // but should be "string азуй" as below
string азуй

那么,这怎么可能呢??

1) 相同内容

2) 相同的可变类型

3) 相同的(decodeURIComponent)功能

  • 但结果不同

附言:我看到的唯一区别是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([dw]{4})/gi;
content = content.replace(r, function (match, grp) {
    return String.fromCharCode(parseInt(grp, 16)); } );
content = unescape(content);

最新更新