后台响应ajax请求并抛出异常时,将经过拦截器HikExceptionInterceptor,在返回错误码前先通过URLEncoder进行编码:URLEncoder.encode(message, "UTF-8")
- 字符"a"-"z","A"-"Z","0"-"9",".","-","*"和"_"都不会被编码;
- 将空格转换为加号(+) ;
- 将非文本内容转换成"%xy"的形式,xy是两位16进制的数值;
- 在每个name=value对之间放置&符号
前台在jquery-override.js中通过decodeURI解码:statusMsg = decodeURI(statusMsg); 而encodeURI编码时
- 字符"a"-"z","A"-"Z","0"-"9"都不会被编码;
- "!","#","$","&","'","(",")","*","+",",","-",".","/",":",";","=","?","@","_"和"~"都不会被编码;
错误1:此时message中若存在空格,则在前台显示为加号,解决方案:需要在后台先将加号replace成%20,这样前台才会解码为空格;
错误2:此时message中若存在:等英文符号,后台编码后,前台无法解码,造成乱码,解决方案:
将
statusMsg = decodeURI(statusMsg);
替换成
statusMsg = decodeURIComponent(statusMsg);
statusMsg = unescape(statusMsg);
decodeURIComponent不会解码"!","'","(",")","*","-",".","_","~"
unescape不会解码"*","+","-",".","/","@","_"
两者连续使用不会解码"*","-",".","_",恰恰好这4个后台又不会编码
本文探讨了在后台响应AJAX请求时遇到的编码问题,包括空格转换为加号和特殊字符编码导致的乱码。解决方案是在后台编码前将空格替换为%20,并在前台使用decodeURIComponent和unescape连续解码,以确保正确处理包含特殊字符的消息。此问题主要涉及URL编码标准与JavaScript解码方法的匹配。
8万+

被折叠的 条评论
为什么被折叠?



