decodeURIComponent 是同时工作还是不同时工作?
decodeURIComponent is both working and not working simultaneously?
我无法理解,但这是我的情况。
我有这个安宁的代码:
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 服务器上 运行 它 returns 这个 "abnormal" 结果:
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
变量的来源。但是这个有作用吗?
您创建的第二个字符串不是包含反斜杠的字符串。相反,它是一串 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);
我无法理解,但这是我的情况。
我有这个安宁的代码:
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 服务器上 运行 它 returns 这个 "abnormal" 结果:
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
变量的来源。但是这个有作用吗?
您创建的第二个字符串不是包含反斜杠的字符串。相反,它是一串 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);