我无法理解,但这是我的情况。
我有这种代码的和平:
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。我看到的唯一区别是content
和string
vars的来源。但这是否起作用?
答案 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);