2016-05-16 37 views
0

我只是不明白,但这是我的情况。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变量的起源。但这是否起作用?

+0

的[?我如何解码与忽略Unicode字符串(可能的复制http://stackoverflow.com/questions/7885096/how-do-i-decode -a-string-with-escaped-unicode) –

+0

它不重复,因为我没有意识到我在'content'中有双重转义 –

回答

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);