我如何解码一个string与逃脱unicode?

我不确定这是什么,所以我无法find它。 我怎样才能解码一个unicode从http\u00253A\u00252F\u00252Fexample.comhttp://example.com与JavaScript的string? 我试过unescapedecodeURI ,和decodeURIComponent所以我想唯一剩下的就是stringreplace。

编辑:string是不是键入,而是从另一段代码的子string。 所以要解决这个问题,你必须从这样的事情开始:

 var s = 'http\\u00253A\\u00252F\\u00252Fexample.com'; 

我希望显示为什么unescape()不起作用。

这是一个unicode,转义string。 首先string被转义,然后用unicode编码。 要转换回正常状态:

 var x = "http\\u00253A\\u00252F\\u00252Fexample.com"; var r = /\\u([\d\w]{4})/gi; x = x.replace(r, function (match, grp) { return String.fromCharCode(parseInt(grp, 16)); } ); console.log(x); // http%3A%2F%2Fexample.com x = unescape(x); console.log(x); // http://example.com 

解释一下:我用一个正则expression式来查找\u0025 。 然而,因为我只需要这个string的一部分用于replace操作,所以我使用圆括号来隔离要重用的部分0025 。 这个孤立的部分被称为一个组。

expression式结尾的gi部分表示它应该匹配string中的所有实例,而不仅仅是第一个实例,并且匹配应该不区分大小写。 考虑到这个例子,这看起来没有必要,但它增加了多function性。

现在,为了从一个string转换到下一个string,我需要在每个匹配的每个组上执行一些步骤,而我不能通过简单地转换string来实现。 有意思的是,String.replace操作可以接受一个函数,每个匹配都会被执行。 该函数的返回将replacestring中的匹配本身。

我使用这个函数接受的第二个参数,它是我需要使用的组,并将其转换为等效的utf-8序列,然后使用内置的unescape函数将string解码为适当的forms。

原始答案:

 unescape(JSON.parse('"http\\u00253A\\u00252F\\u00252Fexample.com"')); > 'http://example.com' 

你可以把所有的工作卸载到JSON.parse

编辑(2017-10-12)

@MechaLynx和@ Kevin-Weber注意到, unescape()在非浏览器环境中被弃用,在TypeScript中不存在。 decodeURIComponent是一个直接replace。 为了更广泛的兼容性,请使用下面的代码

 decodeURIComponent(JSON.parse('"http\\u00253A\\u00252F\\u00252Fexample.com"')); > 'http://example.com' 

请注意,例如, 不推荐使用unescape()而使用 TypeScript编译器。

根据radicand的回答和下面的评论部分,这是一个更新的解决scheme:

 var string = "http\\u00253A\\u00252F\\u00252Fexample.com"; decodeURIComponent(JSON.parse('"' + string.replace(/\"/g, '\\"') + '"')); 

http://example.com

看看这个网页: http : //www.rishida.net/tools/conversion/

将代码粘贴到顶部文本框中(首先删除双斜杠)。

该代码是开源的: http : //www.rishida.net/tools/conversion/conversionfunctions.js