url传递中文乱码问题

通过链接传递参数值是中文时,会有2个问题:(页面采用UTF-8格式)
1》中文乱码,在action接值时转码即可(使用new String(str.getBytes("iso-8859-1"),"UTF-8"))
2》传递的中文参数后面还有其他参数,此时页面: 查询 其中:
查询条件search_name=“张三”,后面nPageNo=1;当action接值时,request.getParameter("search_name")取到的值是:“张三的乱码“nPageNo=1 看了网上很多帖子,自己实践了一下,改为如下:页面:
(不要使用EL语言,使用jsp脚本)
<% String search_name = request.getParameter("search_name");
if(search_name != null ){ //把汉字进行编码 search_name = URLEncoder.encode(search_name,"UTF-8");
}
%> 查询 action接值:
String search_name= this.getRequest().getParameter("search_name");
if (search_name != null ) { search_name = new String(search_name.getBytes("iso-8859-1"),"UTF-8");
}
分析了一下原因:
tomcat默认的编码格式iso-8859-1,request取值时编码格式变了,由于中文变乱码,故把&nPageNo=1也取到了;所以在页面把传的中文参数转为UTF-8格式,在取的action中把iso-8859-1格式的中文再转成UTF-8格式,中文问题就解决了.
文件1:encode.jsp <%@ page language="java" c pageEncoding="GBK"%><% String sFileName = "中文文件名.doc";
sFileName = java.net.URLEncoder.encode(sFileName);//代码行1 %> decode
文件2:decode.jsp <%@ page language="java" c pageEncoding="gbk"%>
<% String sFileName = request.getParameter("filename"); sFileName = java.net.URLDecoder.decode(sFileName,"GBK");
//代码行3 out.println("filename:"+sFileName); %>看上去,这样肯定可以达到要求了,但是事实不是这样,javascript并不识别jsp编码后的字符串:用鼠标移动到链接上方时,可以看到IE状态栏上的确是正确的编码,即"�����ļ���.doc"
然而要注意的是:用鼠标右键点击链接-〉属性看到的URL是javascript:decode('?D?????t??.doc');后果可想而知,转向后输出的是乱码。弄了半天,转UTF-8也是一样,一个小问题整的很郁闷,最后想到,还得在js这里下手。把encode.jsp代码行1注释掉,代码行2前面加入一行:
filename = encodeURI(filename);
看到一点进展:转向后的url已经很规范了:
filename=中文文件名.doc,但是结果仍然是乱码。为啥呢?注意观察,前面的编码和后面是不一样的!然而,javascript的EncodeURI没有提供编码参数,默然就是UTF-8. 好,那么 sFileName = java.net.URLDecoder.decode(sFileName,"UTF-8");行不行呢?
答案是:不行,原因我现在还没找到,找到了会在此补充,如果哪位知道,还望指点。解决办法:把代码行3替换成 sFileName= new String(sFileName.getBytes("ISO-8859-1"), "UTF-8"); 现在再看结果,已经是正常的中文了。
补充:Ajax中,servlet输出中文之后,需要js读取,同样面临编码问题,可以采取如下方式:在servlet中用URLEncoder编码sText = URLEncoder.encode(sText,"UTF-8"); 在js中用decodeURI解码xText = decodeURI(xText);
相关文章阅读IE浏览器相关问
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Vue.js中,URL传递参数如果包含中文字符可能会遇到乱码问题。这是因为浏览器默认使用UTF-8编码,但HTTP请求头默认设置为ISO-8859-1编码,导致中文字符在传输过程中被错误地解析。解决这个问题有几种方法: 1. **encodeURIComponent编码**: 在发送请求之前,对中文字符串进行`encodeURIComponent`编码,这样可以确保所有字符都被正确转换为URL安全的格式。解码时也需要使用相应的函数(如`decodeURIComponent`)。 ```javascript let url = `your-url?param=${encodeURIComponent('中文参数')}`; ``` 2. **设置请求头**: 在发送请求时,明确设置`Content-Type`头为`application/x-www-form-urlencoded`或`application/json`,这会指示浏览器以正确的编码发送数据。 ```javascript // Axios示例 axios.post('your-url', { param: '中文参数' }, { headers: { 'Content-Type': 'application/x-www-form-urlencoded' } }) ``` 3. **使用URLSearchParams**: 如果是在Vue Router的`query`参数中传递,可以使用`URLSearchParams`对象,它会自动处理编码。 ```javascript this.$router.push({ query: new URLSearchParams({ param: '中文参数' }) }); ``` 4. **后端处理**: 后端接收到请求后,同样需要进行正确的解码处理,确保能正确解析和显示中文参数。 相关问题: 1. 为什么`encodeURIComponent`可以解决乱码问题? 2. 如何在axios的配置中设置`Content-Type`头部? 3. URLSearchParams如何确保中文参数的正确传输?

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值