我如何解码一个string与逃脱unicode?
我不确定这是什么,所以我无法find它。 我怎样才能解码一个unicode从http\u00253A\u00252F\u00252Fexample.com
到http://example.com
与JavaScript的string? 我试过unescape
, decodeURI
,和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