DecodeURIComponent不支持%uXXXX编码组件

时间:2018-05-26 04:43:51

标签: javascript angularjs encodeuricomponent decodeuricomponent

DecodeURIComponent不支持少数编码组件

我在我的json,restapi中发送带有公告格式的JD。所以我编码jd并发送。这没有任何问题正常工作。但是当我尝试解码编码的JD时,我收到错误,因为URI格式错误

var jd = "Where are bullets most often used?

 - Technical writing
 - Reference works
 - Notes
 - Presentations";


var json ={
"job":encodeURIComponent(escape(jd));

}

解码:

var jd = decodeURIComponent(jd);

这是我编码的jd,我从响应中得到了。

Where%20are%20bullets%20most%20often%20used%3F%0A%uF0B7Technical%20writing%0A%uF0B7Sub%20bullet%0A%uF0B7Reference%20works%0A%uF0B7Notes%0A%uF0B7Presentations%0A%uF0B7Lists%0AAn%20alternative%20method%20is%20to%20use%20a%u807Dnumbered%20list%3A%0A1.Technical%20writing%0A2.Reference%20works%0A3.Notes%0A4.Presentations%0A5.Lists

2 个答案:

答案 0 :(得分:1)

你必须先unescape

var jd = decodeURIComponent(unescape(json.job));

答案 1 :(得分:0)

避免使用escape()

来自文档:

  

逃逸()

     

escape()函数计算一个新字符串,其中某些字符已被十六进制转义序列替换。

     

描述

     

转义函数是全局对象的属性。特殊字符的编码除了:@*_+-./

     

字符的十六进制形式,其代码单元值为0xFF或更小,是一个两位数的转义序列:%xx。对于具有更大代码单元的字符,使用四位数格式%uxxxx

     

已过时。不适用于新网站。

     

— MDN JavaScript Reference - escape()

来自维基百科:

  

Unicode字符存在非标准编码:%uxxxx,其中xxxx是UTF-16代码单元,表示为四个十六进制数字。任何RFC都未指定此行为,并且W3C已rejected。 ECMA-262的第三版仍包含escape函数,该函数使用此语法,以及encodeURIencodeURIComponent函数,它们将UTF-8编码应用于字符串,然后使用百分比转义结果字节。

     

— Wikipedia - Percent encoding - Non-standard implementations