0

DecodeURIComponent 不支持少数编码组件

我在我的 json 中发送带有公告格式的 JD,在 restapi 中。所以我正在编码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
4

2 回答 2

1

你必须unescape

var jd = decodeURIComponent(unescape(json.job));
于 2018-05-26T06:09:01.703 回答
0

避免使用escape().

从文档:

逃脱()

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

描述

转义函数是全局对象的属性。特殊字符被编码,但以下情况除外:@*_+-./

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

已弃用。不适用于新网站。

— MDN JavaScript 参考 - escape()

来自维基百科:

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

— 维基百科 - 百分比编码 - 非标准实现

于 2018-05-26T14:58:30.200 回答