JS编解码与Java编解码的对应关系

摘要:
后端Java代码使用URLEncoder Encode()以UTF-8编码。由于后端数据流也经过BFF层,并且编码的字符在BFF层中再次编码,所以在第一个段被JavaScript decodeURIComponet()方法解码后,编码的字符仍然会出现。因此,需要多次解码。我调用decodeURIComponent()方法三次来解码文件名。

  最近前段在导出数据时会遇到“illegal character”的异常错误,结果发现是在请求地址中请求参数包含了空白字符(其编码为%C2%A0)或者是空格字符(其编码为%20),之前对空格字符情况是做了规避处理,而这次又出现了空白字符,要是后续还有其它特殊字符呢?那如何是好?难道每次遇到这些特使字符就在后端做特殊处理?这样显然不合适。既然后端对请求地址(包含请求参数)进行了非法校验(通过URBuilder类进行处理),那么目前只好将请求参数(我遇到的问题是下载的文件名称含有空格或空白字符)放置在请求体中了,这样就可以规避URBuilder的检查处理,在后端中从请求体中获取我想要的文件名称。

  虽然,将文件名称从请求参数移动到请求体中,可以规避URBuilder对请求参数中含有非法字符的检验,但是前端所下载下来的文件名称还是不能正常显示空格或空白字符,都是这些特殊字符的编码形式。后端Java代码是使用了URLEncoder.encode()进行了UTF-8编码,由于后端的数据流还经过了BFF层,由于在BFF层又对编码过的字符再次进行了编码,导致在前段用JavaScript的decodeURIComponet()方法进行一次解码后仍旧显示的编码字符,因此需要进行多次解码才行,我这里是调用了三次decodeURIComponet()方法解码才能够正常显示文件名称了。

  说明一下:在Java中用URLEncoder.encode()和URIDecoder.decode(),那么在JavaScript中需要采用decodeURIComponet()和encodeURIComponet()进行配对。

20191105 闪

免责声明:文章转载自《JS编解码与Java编解码的对应关系》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇若干结论和定理(停更)重新理解:ASP.NET 异步编程下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

js中遇到的一个小问题,关于Uncaught ReferenceError:XXX is not defined at HTMLAnchorElement.onclick报错

一、报错代码及原因 <!DOCTYPE html> <html> <head> <title></title> </head> <body> <a href="javascript:void(0)" onclick="init()">点我<...

C#中ASCII码与字符串的互换

主要代码: int a = (int)'a';// 把字符直接转换为int类型,即可得到ASCII码值 string A = ((char)65).ToString();// 将数字直接转换为char类型,即可得到ASCII码对应的字符 Console.WriteLine("a的ASC...

JS基础知识1

基础点: es5 原型链、 2. 继承、 3. this指向、 4. new操作符、 5. 隐式转换、 6. 事件循环机制macro micro、 7. 基础类型、 8. 数据去重/交集/并集、 9. 判断是否为数组、 10. 变量声明提升、 11. 函数作用域、 12. 节流/防抖、 13.  apply/call、 14.  jsonp跨域、 15....

Mongodb中的js语法

定义一个变量 > var len = 10; For循环 这里的db和data都可以作为对象 save是方法 接收一个临时定义的对象 > for(var i = 0; i < len; i++){db.data.save({x:i})}; WriteResult({ "nInserted" : 1 }) > db.dat...

js的窗口坐标及拖拽

一、事件对象的坐标属性1、事件对象.offsetX 对象事件.offsetY 点击时,获取的是标签左上角的坐标2、事件对象.clientX 事件对象.clientY 点击时,视窗左上角坐标3、事件对象.pageX 事件对象.pageY 点击时,页面左上角坐标 如果没有滚动,页面左上角和视窗的左上角重合,两个数值是不同的 var oDiv = documen...

http请求 url 传递参数(特殊字符)解决方法

有些符号在URL中是不能直接传递的,如果要在URL中传递这些特殊符号,那么就要使用他们的编码了。下表中列出了一些URL特殊符号及编码       十六进制值 1. + URL 中+号表示空格 %2B 2. 空格 URL中的空格可以用+号或者编码 %20 3. / 分隔目录和子目录 %2F 4. ? 分隔实际的 URL 和参数 %3F...