DecodeURIComponent不支持少数编码组件
我用我的json,restapi发送带有公告格式的JD。所以我正在编码jd并发送。这在没有任何issues.But的情况下正常工作,当我试图解码编码的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);thi是我从响应中得到的编码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发布于 2018-05-26 06:09:01
你必须先unescape它
var jd = decodeURIComponent(unescape(json.job));发布于 2018-05-26 14:58:30
避免使用escape()。
来自“文件”:
逃逸()
escape()函数计算一个新字符串,其中某些字符已被十六进制转义序列替换。 描述 转义函数是全局对象的属性。除了:@*_+-./以外,特殊字符被编码。 字符的十六进制形式(其代码单位值为0xFF或更少)是两位数字转义序列:%xx。对于具有更大代码单元的字符,使用四位格式%uxxxx. 不赞成。不适用于新网站。 MDN JavaScript引用-转义()
维基百科:
对于Unicode字符存在一种非标准编码:
%uxxxx,其中xxxx是一个UTF-16代码单元,表示为四个十六进制数字。此行为不是由任何RFC指定的,而是由已拒绝 W3C指定的。ECMA-262的第三版仍然包括一个使用此语法的escape函数,以及encodeURI和encodeURIComponent函数,它们将UTF-8编码应用于字符串,然后对结果字节进行百分比转义。 - Wikipedia -百分比编码-非标准实现
https://stackoverflow.com/questions/50539403
复制相似问题