tomcat 接受GBK 参数乱码问题 对get请求执行encodeURI(param)编码,在提交encodeURI是javascript函数 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 因为外部程序非web程序 并且他们也不愿意转换编码 所以只能从这边下手 tomcat配置URIEncoding之后它会怎样处理参数? new String("中文".getBytes("utf-8"), "gbk"); 感觉楼上的反了吧,是GBK传到UTF-8 new String("中文".getBytes("GBK"), "UTF-8"); tomcat的处理没那么简单吧 好像它先会把参数转为16进制的字节码然后再转换编码的吧 现在问题是 我怎样把传过来的中文参数还原 如何处理那个参数?可以肯定new String(param.getBytes("utf-8"), "gbk");new String(param.getBytes("gbk"), "utf-8");这些都是不行的 没有错误 就是乱码问题因为URIEncoding配置为UTF-8而传过来的中文参数为GBK所以产生乱码 如果你的外部页面字符集gbk,你的URIEncoding为utf-8,我上面说的肯定是正确的。你再确定一下字符集,以及中间是否有filter已经做了处理。 是有外部程序 (非web程序)以http get方式访问我这边的系统它的url中含有 中文参数(GBK编码)new String("中文".getBytes("utf-8"), "gbk");这种方法是不能解决的因为tomcat会经过别的处理之后才会把参数转为UTF-8所以你直接由UTF-8>>GBK是转不回去的 外部程序get请求是否进行使用gbk进行url encode 使用spring mvc 过滤字符编码也只是对于post请求的吧 外部是非web程序 他们要做encode也比较麻烦 那么他们没有做encode,你传的参数是中文,没有进行url encode,你怎么确定使用的是gbk字符集呢?况且中文字符参数不encode是不符合http协议的,http协议规定,参数只能有ASCII字符的。 这个我确定 因为那边是做游戏客户端 他们统一使用GBK编码并且我把tomcat server.xml里面的uriencoding配置为GBK后在我这边也可以正常取到参数中的中文值 可能是有地方做处理了?你写一个filter,让它最先执行,然后用 new String("中文".getBytes("utf-8"), "gbk");试试,如果还是乱码我就真的无解了。 楼主试试这个:new String(param.getBytes("iso-8859-1"), "utf-8"); 页面也需要设置转码的:页面:(.jsp)<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>response.setContentType("text/html;charset=UTF-8");处理文件:(.java)转码的三种方法:A 接受参数时进行编码转换String str = new String(request.getParameter("something").getBytes("ISO-8859-1"),"utf-8"); 这样的话,每一个参数都必须这样进行转码。很麻烦。但确实可以拿到汉字。B 在请求页面上开始处,执行请求的编码代码, request.setCharacterEncoding("UTF-8"),把提交内容的字符集设为UTF-8。这样的话,接受此参数的页面就不必在转码了。直接使用String str = request.getParameter("something");即可得到汉字参数。但每页都需要执行这句话。这个方法也就对post提交的有效果,对于get提交和上传文件时的enctype="multipart/form-data"是无效的。稍后下面单独对这个两个的乱码情况再进行说明。C 为了避免每页都要写request.setCharacterEncoding("UTF-8"),建议使用过滤器对所有jsp进行编码处理。 百了一下 jsp中如何从数据库中取值绑定到下拉列表 &代替&导致的request读不出值的问题 提问:关于JBPM pager-taglib分页 求救!!! 请问在web中如何创建和页面相关的帮助即一个URL对应一个帮助页面? Android制作类似Exce的l表格 在hibernate里面sort是关键字吗? jsp的运行环境都需要什么软件?各有什么作用? 菜鸟问题:如何提取表单中的数据? 求网站计数器代码(急,在线等待,谢谢) jstl显示无效,跳不进<c:choose><c:if>等标签 cxf+spring 代理上网如何配置
所以只能从这边下手
它会怎样处理参数?
new String("中文".getBytes("GBK"), "UTF-8");
好像它先会把参数转为16进制的字节码
然后再转换编码的吧
如何处理那个参数?
可以肯定
new String(param.getBytes("utf-8"), "gbk");
new String(param.getBytes("gbk"), "utf-8");
这些都是不行的
因为URIEncoding配置为UTF-8
而传过来的中文参数为GBK
所以产生乱码
你再确定一下字符集,以及中间是否有filter已经做了处理。
它的url中含有 中文参数(GBK编码)
new String("中文".getBytes("utf-8"), "gbk");
这种方法是不能解决的
因为tomcat会经过别的处理之后才会把参数转为UTF-8
所以你直接由UTF-8>>GBK是转不回去的
并且我把tomcat server.xml里面的uriencoding配置为GBK后
在我这边也可以正常取到参数中的中文值
页面:(.jsp)
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
response.setContentType("text/html;charset=UTF-8");处理文件:(.java)
转码的三种方法:
A 接受参数时进行编码转换String str = new String(request.getParameter("something").getBytes("ISO-8859-1"),"utf-8"); 这样的话,每一个参数都必须这样进行转码。很麻烦。但确实可以拿到汉字。B 在请求页面上开始处,执行请求的编码代码, request.setCharacterEncoding("UTF-8"),把提交内容的字符集设为UTF-8。这样的话,接受此参数的页面就不必在转码了。直接使用
String str = request.getParameter("something");即可得到汉字参数。但每页都需要执行这句话。这个方法也就对post提交的有效果,对于get提交和上传文件时的enctype="multipart/form-data"是无效的。稍后下面单独对这个两个的乱码情况再进行说明。C 为了避免每页都要写request.setCharacterEncoding("UTF-8"),建议使用过滤器对所有jsp进行编码处理。 百了一下